AIM: Create region by region analysis of male vs female for each age groups (0-4, 5-14, 0-14 and 15 plus) for all countries separated by region

library(dplyr)
library(tidyverse)
library(tidyr)
library(forecast)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
library(fpp2)
── Attaching packages ─────────────────────────────────────────────────── fpp2 2.4 ──
✓ fma       2.4     ✓ expsmooth 2.3
── Conflicts ────────────────────────────────────────────────────── fpp2_conflicts ──
x magrittr::extract()   masks tidyr::extract()
x magrittr::set_names() masks purrr::set_names()
library(stringr)
library(magrittr)
library(ggplot2)

Organising the data by g_whoregion

grouped_2013 <- group_by(world_2013, g_whoregion) %>% filter(year == 2013) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2013)

grouped_2014 <- group_by(world_2013, g_whoregion) %>% filter(year == 2014) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2014)

grouped_2015 <- group_by(world_2013, g_whoregion) %>% filter(year == 2015) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2015)

grouped_2016 <- group_by(world_2013, g_whoregion) %>% filter(year == 2016) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2016)

grouped_2017 <- group_by(world_2013, g_whoregion) %>% filter(year == 2017) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2017)

grouped_2018 <- group_by(world_2013, g_whoregion) %>% filter(year == 2018) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2018)

grouped_2019 <- group_by(world_2013, g_whoregion) %>% filter(year == 2019) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2019)

grouped_2020 <- group_by(world_2013, g_whoregion) %>% filter(year == 2020) %>% summarise(newrel_m04 = sum(na.omit(newrel_m04)), 
                                                                                         newrel_f04 = sum(na.omit(newrel_f04)),
                 newrel_m514 = sum(na.omit(newrel_m514)), newrel_f514 = sum(na.omit(newrel_f514)), 
                 newrel_m014 = sum(na.omit(newrel_m014)), newrel_f014 = sum(na.omit(newrel_f014)), 
                 newrel_m15plus = sum(na.omit(newrel_m15plus)), newrel_f15plus = sum(na.omit(newrel_f15plus))) %>% as.data.frame() %>% cbind(year = 2020)

bind_world <- rbind(grouped_2013, grouped_2014, grouped_2015, grouped_2016, grouped_2017, grouped_2018, grouped_2019, grouped_2020)

bind_world <- bind_world[, c(1, 10, 2:9)]

arrange_world <- arrange(bind_world, g_whoregion)

##Including columns for total values 

mutate_world <- mutate(arrange_world, "newrel_tot04" = newrel_m04 + newrel_f04, "newrel_tot514" = newrel_m514 + newrel_f514, "newrel_tot014" = newrel_m014 + newrel_f014, "newrel_tot15plus" = newrel_m15plus + newrel_f15plus)

perc_world <- mutate(mutate_world, "perc_014" = 100 * (newrel_tot014/(newrel_tot014 + newrel_tot15plus)), "perc_youngkids" = 100 * (newrel_tot04/newrel_tot014))

Creating graphs for male vs female for 0-4 by g_whoregion

afr_04 <- perc_world %>% filter(g_whoregion == "AFR") %>% select(newrel_m04, newrel_f04) %>% 
  t()
colnames(afr_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
afr_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,30000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in AFR")
numeric(0)

amr_04 <- perc_world %>% filter(g_whoregion == "AMR") %>% select(newrel_m04, newrel_f04) %>% 
  t()
colnames(amr_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
amr_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,3000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in AMR")
numeric(0)

emr_04 <- perc_world %>% filter(g_whoregion == "EMR") %>% select(newrel_m04, newrel_f04) %>% 
  t()
colnames(emr_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
emr_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,20000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in EMR")
numeric(0)

eur_04 <- perc_world %>% filter(g_whoregion == "EUR") %>% select(newrel_m04, newrel_f04) %>% 
  t()
colnames(eur_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
eur_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,3000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in EUR")
numeric(0)

sea_04 <- perc_world %>% filter(g_whoregion == "SEA") %>% select(newrel_m04, newrel_f04) %>% 
  t() 
colnames(sea_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
sea_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,60000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in SEA")
numeric(0)

wpr_04 <- perc_world %>% filter(g_whoregion == "WPR") %>% select(newrel_m04, newrel_f04) %>% 
  t()
colnames(wpr_04) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
wpr_04 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,20000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-4 years in WPR")
numeric(0)

Creating graphs for notifications in 5-14 years by g_whoregion

afr_514 <- perc_world %>% filter(g_whoregion == "AFR") %>% select(newrel_m514, newrel_f514) %>% 
  t() 
colnames(afr_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
afr_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,40000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-514 years in AFR")
numeric(0)

amr_514 <- perc_world %>% filter(g_whoregion == "AMR") %>% select(newrel_m514, newrel_f514) %>% 
  t() 
colnames(afr_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
amr_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,4000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 5-14 years in AMR")
numeric(0)

emr_514 <- perc_world %>% filter(g_whoregion == "EMR") %>% select(newrel_m514, newrel_f514) %>% 
  t() 
colnames(emr_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
emr_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,30000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 5-14 years in EMR")
numeric(0)

eur_514 <- perc_world %>% filter(g_whoregion == "EUR") %>% select(newrel_m514, newrel_f514) %>% 
  t()
colnames(eur_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
eur_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,5000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 5-14 years in EUR")
numeric(0)

sea_514 <- perc_world %>% filter(g_whoregion == "SEA") %>% select(newrel_m514, newrel_f514) %>% 
  t() 
colnames(sea_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
sea_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,100000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 5-14 years in SEA")
numeric(0)

wpr_514 <- perc_world %>% filter(g_whoregion == "WPR") %>% select(newrel_m514, newrel_f514) %>% 
  t()
colnames(wpr_514) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
wpr_514 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,30000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 5-14 years in WPR")
numeric(0)

Creating plot for 0-14

afr_014 <- perc_world %>% filter(g_whoregion == "AFR") %>% select(newrel_m014, newrel_f014) %>% 
  t()
colnames(afr_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
afr_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,70000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in AFR")
numeric(0)

amr_014 <- perc_world %>% filter(g_whoregion == "AMR") %>% select(newrel_m014, newrel_f014) %>% 
  t()
colnames(amr_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
amr_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,6000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in AMR")
numeric(0)

emr_014 <- perc_world %>% filter(g_whoregion == "EMR") %>% select(newrel_m014, newrel_f014) %>% 
  t() 
colnames(emr_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
emr_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,50000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in EMR")
numeric(0)

eur_014 <- perc_world %>% filter(g_whoregion == "EUR") %>% select(newrel_m014, newrel_f014) %>% 
  t() 
colnames(eur_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
eur_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,8000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in EUR")
numeric(0)

sea_014 <- perc_world %>% filter(g_whoregion == "SEA") %>% select(newrel_m014, newrel_f014) %>% 
  t()
colnames(sea_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
sea_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,150000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in SEA")
numeric(0)

wpr_014 <- perc_world %>% filter(g_whoregion == "WPR") %>% select(newrel_m014, newrel_f014) %>% 
  t() 
colnames(wpr_014) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
wpr_014 %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,50000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 0-14 years in WPR")
numeric(0)

Creating plot for 15 plus

afr_15plus <- perc_world %>% filter(g_whoregion == "AFR") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t() 
colnames(afr_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
afr_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,1000000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15plus years in AFR")
numeric(0)

amr_15plus <- perc_world %>% filter(g_whoregion == "AMR") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t()
colnames(amr_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
amr_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,300000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15 plus years in AMR")
numeric(0)

emr_15plus <- perc_world %>% filter(g_whoregion == "EMR") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t() 
colnames(emr_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
emr_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,500000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15plus years in EMR")
numeric(0)

eur_15plus <- perc_world %>% filter(g_whoregion == "EUR") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t() 
colnames(eur_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
eur_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,200000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15plus years in EUR")
numeric(0)

sea_15plus <- perc_world %>% filter(g_whoregion == "SEA") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t() 
colnames(sea_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
sea_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,2000000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15plus years in SEA")
numeric(0)

wpr_15plus <- perc_world %>% filter(g_whoregion == "WPR") %>% select(newrel_m15plus, newrel_f15plus) %>% 
  t() 
colnames(wpr_15plus) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
wpr_15plus %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,1000000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for ages 15plus years in WPR")
numeric(0)

Plotting total notifications over time

tot_world <- mutate(perc_world, "newrel_mtot" = newrel_m014 + newrel_m15plus, "newrel_ftot" = newrel_f014 + newrel_f15plus, "TOT" = newrel_mtot + newrel_ftot)

afr_tot <- tot_world %>% filter(g_whoregion == "AFR") %>% select(newrel_mtot, newrel_ftot) %>% 
  t() 
colnames(afr_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
afr_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,1000000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in AFR")
numeric(0)

amr_tot <- tot_world %>% filter(g_whoregion == "AMR") %>% select(newrel_mtot, newrel_ftot) %>% 
  t()
colnames(amr_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
amr_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,200000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in AMR")
numeric(0)

emr_tot <- tot_world %>% filter(g_whoregion == "EMR") %>% select(newrel_mtot, newrel_ftot) %>% 
  t() 
colnames(emr_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
emr_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,500000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in EMR")
numeric(0)

eur_tot <- tot_world %>% filter(g_whoregion == "EUR") %>% select(newrel_mtot, newrel_ftot) %>% 
  t()
colnames(eur_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
eur_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,200000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in EUR")
numeric(0)

sea_tot <- tot_world %>% filter(g_whoregion == "SEA") %>% select(newrel_mtot, newrel_ftot) %>% 
  t() 
colnames(sea_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
sea_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,3000000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in SEA")
numeric(0)

wpr_tot <- tot_world %>% filter(g_whoregion == "WPR") %>% select(newrel_mtot, newrel_ftot) %>% 
  t() 
colnames(wpr_tot) <- c("2013", "2014", "2015", "2016", "2017", "2018", "2019", "2020")
wpr_tot %<>% barplot(col = c("skyblue", "seagreen1"), beside = TRUE, ylim = c(0,1500000), xlab = "year", ylab = "notifications") + title("Sex disaggregated notifications for all ages years in WPR")
numeric(0)

##Attempt at creating a forecast 

filt_afr04 <- perc_world %>% filter(g_whoregion == "AFR") %>% filter(year != 2020)

ts_afr04 <- ts(filt_afr04[, c(3)], start = 2013, frequency = 1)

arima_afr04 <- auto.arima(ts_afr04, d=1, D=1, stepwise = FALSE, approximation = FALSE, trace = TRUE)

 ARIMA(0,1,0)                    : 111.1694
 ARIMA(0,1,0) with drift         : 114.7184
 ARIMA(0,1,1)                    : 115.9016
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 115.7354
 ARIMA(1,1,0) with drift         : Inf
 ARIMA(1,1,1)                    : 125.4818
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    
print(summary(arima_afr04))
Series: ts_afr04 
ARIMA(0,1,0) 

sigma^2 estimated as 3954567:  log likelihood=-54.08
AIC=110.17   AICc=111.17   BIC=109.96

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 793.0733 1841.094 1358.216 3.037032 5.197868 0.8590867 -0.650155
checkresiduals(arima_afr04)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,0)
Q* = 5.0245, df = 3, p-value = 0.17

Model df: 0.   Total lags used: 3

fcst_afrm04 <- forecast(arima_afr04, h = 1)
autoplot(fcst)

sum_afrm04 <- print(summary(fcst))

Forecast method: ARIMA(0,1,0)

Model Information:
Series: ts_afr04 
ARIMA(0,1,0) 

sigma^2 estimated as 3954567:  log likelihood=-54.08
AIC=110.17   AICc=111.17   BIC=109.96

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 793.0733 1841.094 1358.216 3.037032 5.197868 0.8590867 -0.650155

Forecasts:
####Attempt at creating function to produce predictions 

out_2020 <- function(df = tot_world, region){
        df %>% filter(year != 2020) %>% filter(g_whoregion == region) %>% return() }

arima_TB <- function(df = tot_world, group) {
        data1 <- df %>% select(group) %>% ts(start = 2013, frequency = 1) %>% auto.arima(d=1, D=1, stepwise = FALSE, approximation = FALSE, trace = TRUE) 
        print(summary(data1))
        FCST <- forecast(data1, h = 1)
        autoplot(FCST)
        print(summary(FCST))}

##AFRICA ESTIMATES 

afr_m04 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_m04") 
Note: Using an external vector in selections is ambiguous.
ℹ Use `all_of(group)` instead of `group` to silence this message.
ℹ See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
This message is displayed once per session.

 ARIMA(0,1,0)                    : 111.1694
 ARIMA(0,1,0) with drift         : 114.7184
 ARIMA(0,1,1)                    : 115.9016
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 115.7354
 ARIMA(1,1,0) with drift         : Inf
 ARIMA(1,1,1)                    : 125.4818
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3954567:  log likelihood=-54.08
AIC=110.17   AICc=111.17   BIC=109.96

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 793.0733 1841.094 1358.216 3.037032 5.197868 0.8590867 -0.650155

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3954567:  log likelihood=-54.08
AIC=110.17   AICc=111.17   BIC=109.96

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 793.0733 1841.094 1358.216 3.037032 5.197868 0.8590867 -0.650155

Forecasts:
rownames(afr_m04) <- "afr_m04"

afr_f04 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 111.1038
 ARIMA(0,1,0) with drift         : 114.5687
 ARIMA(0,1,1)                    : 116.0674
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 116.0417
 ARIMA(1,1,0) with drift         : 123.1058
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3911516:  log likelihood=-54.05
AIC=110.1   AICc=111.1   BIC=109.9

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 808.0217 1831.046 1337.165 3.504448 6.329902 0.8588083 -0.4289628

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3911516:  log likelihood=-54.05
AIC=110.1   AICc=111.1   BIC=109.9

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 808.0217 1831.046 1337.165 3.504448 6.329902 0.8588083 -0.4289628

Forecasts:
rownames(afr_f04) <- "afr_f04"

afr_m514 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 117.6737
 ARIMA(0,1,0) with drift         : 121.1402
 ARIMA(0,1,1)                    : 122.6736
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 122.6736
 ARIMA(1,1,0) with drift         : 130.0079
 ARIMA(1,1,1)                    : 132.6046
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 131.7788
 ARIMA(2,1,0) with drift         : 159.9311
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 11691922:  log likelihood=-57.34
AIC=116.67   AICc=117.67   BIC=116.47

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1395.087 3165.699 2467.373 4.502111 8.326399 0.8582664 -0.3285392

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 11691922:  log likelihood=-57.34
AIC=116.67   AICc=117.67   BIC=116.47

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1395.087 3165.699 2467.373 4.502111 8.326399 0.8582664 -0.3285392

Forecasts:
rownames(afr_m514) <- "afr_m514"

afr_f514 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 117.2334
 ARIMA(0,1,0) with drift         : 121.2201
 ARIMA(0,1,1)                    : 122.2328
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 122.2325
 ARIMA(1,1,0) with drift         : 130.5247
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 131.8107
 ARIMA(2,1,0) with drift         : 160.4149
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 10864754:  log likelihood=-57.12
AIC=116.23   AICc=117.23   BIC=116.03

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1117.231 3051.663 2274.088 3.379023 7.511132 0.8584703 -0.2394624

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 10864754:  log likelihood=-57.12
AIC=116.23   AICc=117.23   BIC=116.03

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1117.231 3051.663 2274.088 3.379023 7.511132 0.8584703 -0.2394624

Forecasts:
rownames(afr_f514) <- "afr_f514"

afr_m014 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 121.8118
 ARIMA(0,1,0) with drift         : 125.8302
 ARIMA(0,1,1)                    : 126.7857
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 126.7703
 ARIMA(1,1,0) with drift         : 134.2116
 ARIMA(1,1,1)                    : 136.3851
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 135.8829
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 23303291:  log likelihood=-59.41
AIC=120.81   AICc=121.81   BIC=120.6

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1614.328 4469.256 3188.614 2.684558 5.574168 0.8590016 -0.3180155

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 23303291:  log likelihood=-59.41
AIC=120.81   AICc=121.81   BIC=120.6

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1614.328 4469.256 3188.614 2.684558 5.574168 0.8590016 -0.3180155

Forecasts:
rownames(afr_m014) <- "afr_m014"

afr_f014 <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 122.4939
 ARIMA(0,1,0) with drift         : 126.8435
 ARIMA(0,1,1)                    : 127.4896
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 127.488
 ARIMA(1,1,0) with drift         : 136.419
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 137.1726
 ARIMA(2,1,0) with drift         : 166.4068
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 26109056:  log likelihood=-59.75
AIC=121.49   AICc=122.49   BIC=121.29

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1410.503 4730.665 3787.646 2.301644 7.442093 0.8586494 -0.1756356

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 26109056:  log likelihood=-59.75
AIC=121.49   AICc=122.49   BIC=121.29

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1410.503 4730.665 3787.646 2.301644 7.442093 0.8586494 -0.1756356

Forecasts:
rownames(afr_f014) <- "afr_f014"

afr_m15plus <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 147.8467
 ARIMA(0,1,0) with drift         : 151.7651
 ARIMA(0,1,1)                    : 152.7979
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 152.7548
 ARIMA(1,1,0) with drift         : 159.8714
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 161.2934
 ARIMA(2,1,0) with drift         : 189.8465
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1.786e+09:  log likelihood=-72.42
AIC=146.85   AICc=147.85   BIC=146.64

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 14791.42 39126.57 26895.42 2.246912 4.075435 0.8596953 -0.3986632

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1.786e+09:  log likelihood=-72.42
AIC=146.85   AICc=147.85   BIC=146.64

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 14791.42 39126.57 26895.42 2.246912 4.075435 0.8596953 -0.3986632

Forecasts:
rownames(afr_m15plus) <- "afr_m15plus"

afr_f15plus <- out_2020(tot_world, "AFR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 143.4497
 ARIMA(0,1,0) with drift         : 148.2692
 ARIMA(0,1,1)                    : 147.7646
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 157.6537
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 147.4938
 ARIMA(1,1,0) with drift         : 156.2684
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 157.1647
 ARIMA(2,1,0) with drift         : 186.183
 ARIMA(2,1,1)                    : 186.7743
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 858280286:  log likelihood=-70.22
AIC=142.45   AICc=143.45   BIC=142.24

Training set error measures:
                   ME     RMSE      MAE       MPE   MAPE     MASE       ACF1
Training set 4379.362 27123.22 20044.79 0.8601614 4.6618 0.859572 -0.4409411

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 858280286:  log likelihood=-70.22
AIC=142.45   AICc=143.45   BIC=142.24

Error measures:
                   ME     RMSE      MAE       MPE   MAPE     MASE       ACF1
Training set 4379.362 27123.22 20044.79 0.8601614 4.6618 0.859572 -0.4409411

Forecasts:
rownames(afr_f15plus) <- "afr_f15plus"

afr_estimates <- rbind(afr_m04, afr_f04, afr_m514, afr_f514, afr_m014, afr_f014, afr_m15plus, afr_f15plus)


#SEA predictions 
sea_m04 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 129.8095
 ARIMA(0,1,0) with drift         : 128.9832
 ARIMA(0,1,1)                    : 133.4638
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 133.3583
 ARIMA(1,1,0) with drift         : 138.4097
 ARIMA(1,1,1)                    : 143.2038
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 143.3582
 ARIMA(2,1,0) with drift         : 165.0954
 ARIMA(2,1,1)                    : 173.2038
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
         drift
      7409.833
s.e.  2361.681

sigma^2 estimated as 40157453:  log likelihood=-60.49
AIC=124.98   AICc=128.98   BIC=124.57

Training set error measures:
                     ME     RMSE     MAE       MPE     MAPE     MASE       ACF1
Training set -0.0466907 5355.735 4222.19 0.4100235 14.29603 0.569809 -0.2163359

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
         drift
      7409.833
s.e.  2361.681

sigma^2 estimated as 40157453:  log likelihood=-60.49
AIC=124.98   AICc=128.98   BIC=124.57

Error measures:
                     ME     RMSE     MAE       MPE     MAPE     MASE       ACF1
Training set -0.0466907 5355.735 4222.19 0.4100235 14.29603 0.569809 -0.2163359

Forecasts:
rownames(sea_m04) <- "sea_m04"

sea_f04 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 126.2488
 ARIMA(0,1,0) with drift         : 125.9369
 ARIMA(0,1,1)                    : 130.0851
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 129.9836
 ARIMA(1,1,0) with drift         : 135.4326
 ARIMA(1,1,1)                    : 139.8509
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 139.9764
 ARIMA(2,1,0) with drift         : 162.569
 ARIMA(2,1,1)                    : 169.8484
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
        drift
      5355.00
s.e.  1832.19

sigma^2 estimated as 24169343:  log likelihood=-58.97
AIC=121.94   AICc=125.94   BIC=121.52

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set 0.1219997 4154.975 3249.836 0.6199827 13.78026 0.6068789 -0.1951322

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
        drift
      5355.00
s.e.  1832.19

sigma^2 estimated as 24169343:  log likelihood=-58.97
AIC=121.94   AICc=125.94   BIC=121.52

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set 0.1219997 4154.975 3249.836 0.6199827 13.78026 0.6068789 -0.1951322

Forecasts:
rownames(sea_f04) <- "sea_f04"

sea_m514 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 138.7575
 ARIMA(0,1,0) with drift         : 141.1449
 ARIMA(0,1,1)                    : 143.4767
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 153.3661
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 143.3658
 ARIMA(1,1,0) with drift         : 151.0966
 ARIMA(1,1,1)                    : 153.2438
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 183.3643
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : 180.866
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 392626539:  log likelihood=-67.88
AIC=137.76   AICc=138.76   BIC=137.55

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 10092.84 18344.95 10092.84 16.02839 16.02839 0.8572872 -0.2886571

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 392626539:  log likelihood=-67.88
AIC=137.76   AICc=138.76   BIC=137.55

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 10092.84 18344.95 10092.84 16.02839 16.02839 0.8572872 -0.2886571

Forecasts:
rownames(sea_m514) <- "sea_m514"

sea_f514 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 139.9886
 ARIMA(0,1,0) with drift         : 142.6269
 ARIMA(0,1,1)                    : 144.7946
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 154.2335
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 144.6597
 ARIMA(1,1,0) with drift         : 152.6186
 ARIMA(1,1,1)                    : 154.6524
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 184.2124
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 154.649
 ARIMA(2,1,0) with drift         : 182.54
 ARIMA(2,1,1)                    : 184.4943
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 482053005:  log likelihood=-68.49
AIC=138.99   AICc=139.99   BIC=138.78

Training set error measures:
                   ME     RMSE      MAE      MPE    MAPE      MASE       ACF1
Training set 10736.71 20327.03 11456.99 15.81939 16.8546 0.8572705 -0.2512842

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 482053005:  log likelihood=-68.49
AIC=138.99   AICc=139.99   BIC=138.78

Error measures:
                   ME     RMSE      MAE      MPE    MAPE      MASE       ACF1
Training set 10736.71 20327.03 11456.99 15.81939 16.8546 0.8572705 -0.2512842

Forecasts:
rownames(sea_f514) <- "sea_f514"

sea_m014 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 143.1301
 ARIMA(0,1,0) with drift         : 144.5331
 ARIMA(0,1,1)                    : 147.643
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 157.5019
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 147.499
 ARIMA(1,1,0) with drift         : 154.2417
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 186.9908
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 157.4961
 ARIMA(2,1,0) with drift         : 183.4944
 ARIMA(2,1,1)                    : 187.4946
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 813725760:  log likelihood=-70.07
AIC=142.13   AICc=143.13   BIC=141.92

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 16421.31 26409.83 16421.31 17.32705 17.32705 0.8572857 -0.387646

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 813725760:  log likelihood=-70.07
AIC=142.13   AICc=143.13   BIC=141.92

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 16421.31 26409.83 16421.31 17.32705 17.32705 0.8572857 -0.387646

Forecasts:
rownames(sea_m014) <- "sea_m014"

sea_f014 <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 143.0538
 ARIMA(0,1,0) with drift         : 145.0229
 ARIMA(0,1,1)                    : 147.7415
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 157.2544
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 147.5565
 ARIMA(1,1,0) with drift         : 154.9293
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 187.2272
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 157.5482
 ARIMA(2,1,0) with drift         : 184.6836
 ARIMA(2,1,1)                    : 187.3948
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 803450152:  log likelihood=-70.03
AIC=142.05   AICc=143.05   BIC=141.85

Training set error measures:
                  ME     RMSE     MAE      MPE     MAPE      MASE       ACF1
Training set 15302.9 26242.55 15302.9 16.59731 16.59731 0.8572895 -0.3224274

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 803450152:  log likelihood=-70.03
AIC=142.05   AICc=143.05   BIC=141.85

Error measures:
                  ME     RMSE     MAE      MPE     MAPE      MASE       ACF1
Training set 15302.9 26242.55 15302.9 16.59731 16.59731 0.8572895 -0.3224274

Forecasts:
rownames(sea_f014) <- "sea_f014"

sea_m15plus <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 176.6742
 ARIMA(0,1,0) with drift         : 179.3839
 ARIMA(0,1,1)                    : 181.6143
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 191.2782
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 181.5536
 ARIMA(1,1,0) with drift         : 189.2337
 ARIMA(1,1,1)                    : 191.3233
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 221.1653
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 191.4064
 ARIMA(2,1,0) with drift         : 219.2186
 ARIMA(2,1,1)                    : 221.2795
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 2.18e+11:  log likelihood=-86.84
AIC=175.67   AICc=176.67   BIC=175.47

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 225490.8 432281.4 237748.2 14.63527 15.40864 0.8573248 -0.3031529

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 2.18e+11:  log likelihood=-86.84
AIC=175.67   AICc=176.67   BIC=175.47

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 225490.8 432281.4 237748.2 14.63527 15.40864 0.8573248 -0.3031529

Forecasts:
rownames(sea_m15plus) <- "sea_m15plus"

sea_f15plus <- out_2020(tot_world, "SEA") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 168.8186
 ARIMA(0,1,0) with drift         : 170.5037
 ARIMA(0,1,1)                    : 173.6346
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 173.459
 ARIMA(1,1,0) with drift         : 180.1729
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 183.2908
 ARIMA(2,1,0) with drift         : 210.0185
 ARIMA(2,1,1)                    : 213.0905
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 5.887e+10:  log likelihood=-82.91
AIC=167.82   AICc=168.82   BIC=167.61

Training set error measures:
                 ME     RMSE    MAE      MPE     MAPE      MASE       ACF1
Training set 135527 224627.7 135527 15.54276 15.54276 0.8573545 -0.3868371

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 5.887e+10:  log likelihood=-82.91
AIC=167.82   AICc=168.82   BIC=167.61

Error measures:
                 ME     RMSE    MAE      MPE     MAPE      MASE       ACF1
Training set 135527 224627.7 135527 15.54276 15.54276 0.8573545 -0.3868371

Forecasts:
rownames(sea_f15plus) <- "sea_f15plus"

sea_estimates <- rbind(sea_m04, sea_f04, sea_m514, sea_f514, sea_m014, sea_f014, sea_m15plus, sea_f15plus)

#WPR estimates 

wpr_m04 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 117.987
 ARIMA(0,1,0) with drift         : 120.6596
 ARIMA(0,1,1)                    : 122.6039
 ARIMA(0,1,1) with drift         : 130.6566
 ARIMA(0,1,2)                    : 132.1259
 ARIMA(0,1,2) with drift         : 160.3447
 ARIMA(1,1,0)                    : 122.4011
 ARIMA(1,1,0) with drift         : 130.6558
 ARIMA(1,1,1)                    : 132.1779
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 161.9353
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 131.972
 ARIMA(2,1,0) with drift         : 160.5433
 ARIMA(2,1,1)                    : 161.9623
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12318696:  log likelihood=-57.49
AIC=116.99   AICc=117.99   BIC=116.78

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1705.945 3249.443 2805.374 20.95097 30.38595 0.8571698 -0.1090836

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12318696:  log likelihood=-57.49
AIC=116.99   AICc=117.99   BIC=116.78

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1705.945 3249.443 2805.374 20.95097 30.38595 0.8571698 -0.1090836

Forecasts:
rownames(wpr_m04) <- "wpr_m04"

wpr_f04 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 115.7528
 ARIMA(0,1,0) with drift         : 118.5332
 ARIMA(0,1,1)                    : 120.4465
 ARIMA(0,1,1) with drift         : 128.5172
 ARIMA(0,1,2)                    : 130.0029
 ARIMA(0,1,2) with drift         : 158.2683
 ARIMA(1,1,0)                    : 120.2961
 ARIMA(1,1,0) with drift         : 128.5132
 ARIMA(1,1,1)                    : 130.083
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 159.8347
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 129.8787
 ARIMA(2,1,0) with drift         : 158.4132
 ARIMA(2,1,1)                    : 159.8769
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 8488853:  log likelihood=-56.38
AIC=114.75   AICc=115.75   BIC=114.54

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1388.774 2697.436 2351.631 21.47588 31.76637 0.8571647 -0.1220096

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 8488853:  log likelihood=-56.38
AIC=114.75   AICc=115.75   BIC=114.54

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1388.774 2697.436 2351.631 21.47588 31.76637 0.8571647 -0.1220096

Forecasts:
rownames(wpr_f04) <- "wpr_f04"

wpr_m514 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 121.504
 ARIMA(0,1,0) with drift         : 123.8299
 ARIMA(0,1,1)                    : 126.3435
 ARIMA(0,1,1) with drift         : 133.7516
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 126.0875
 ARIMA(1,1,0) with drift         : 133.6501
 ARIMA(1,1,1)                    : 135.4448
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 22137609:  log likelihood=-59.25
AIC=120.5   AICc=121.5   BIC=120.3

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 2418.811 4356.041 3571.382 17.62742 23.71631 0.8572347 -0.263211

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 22137609:  log likelihood=-59.25
AIC=120.5   AICc=121.5   BIC=120.3

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 2418.811 4356.041 3571.382 17.62742 23.71631 0.8572347 -0.263211

Forecasts:
rownames(wpr_m514) <- "wpr_m514"

wpr_f514 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 119.8234
 ARIMA(0,1,0) with drift         : 122.1114
 ARIMA(0,1,1)                    : 124.7307
 ARIMA(0,1,1) with drift         : 131.9174
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 124.5719
 ARIMA(1,1,0) with drift         : 131.6532
 ARIMA(1,1,1)                    : 133.8761
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 16729524:  log likelihood=-58.41
AIC=118.82   AICc=119.82   BIC=118.62

Training set error measures:
                   ME     RMSE    MAE      MPE    MAPE      MASE       ACF1
Training set 2114.529 3786.765 3049.1 17.08469 22.6313 0.8572513 -0.3350534

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 16729524:  log likelihood=-58.41
AIC=118.82   AICc=119.82   BIC=118.62

Error measures:
                   ME     RMSE    MAE      MPE    MAPE      MASE       ACF1
Training set 2114.529 3786.765 3049.1 17.08469 22.6313 0.8572513 -0.3350534

Forecasts:
rownames(wpr_f514) <- "wpr_f514"

wpr_m014 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 127.329
 ARIMA(0,1,0) with drift         : 129.3522
 ARIMA(0,1,1)                    : 132.0091
 ARIMA(0,1,1) with drift         : 139.3173
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 131.6732
 ARIMA(1,1,0) with drift         : 139.2927
 ARIMA(1,1,1)                    : 141.1479
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 140.1957
 ARIMA(2,1,0) with drift         : 168.6569
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 58446545:  log likelihood=-62.16
AIC=126.33   AICc=127.33   BIC=126.12

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 4098.811 7077.926 6008.525 18.28722 24.50654 0.8572381 -0.1974907

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 58446545:  log likelihood=-62.16
AIC=126.33   AICc=127.33   BIC=126.12

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 4098.811 7077.926 6008.525 18.28722 24.50654 0.8572381 -0.1974907

Forecasts:
rownames(wpr_m014) <- "wpr_m014"

wpr_f014 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 125.4245
 ARIMA(0,1,0) with drift         : 127.5424
 ARIMA(0,1,1)                    : 130.1948
 ARIMA(0,1,1) with drift         : 137.4582
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 129.9333
 ARIMA(1,1,0) with drift         : 137.3915
 ARIMA(1,1,1)                    : 139.3634
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 138.0696
 ARIMA(2,1,0) with drift         : 166.547
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 42550393:  log likelihood=-61.21
AIC=124.42   AICc=125.42   BIC=124.22

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 3453.738 6039.186 5152.595 18.00039 24.46396 0.8572418 -0.2381519

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 42550393:  log likelihood=-61.21
AIC=124.42   AICc=125.42   BIC=124.22

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 3453.738 6039.186 5152.595 18.00039 24.46396 0.8572418 -0.2381519

Forecasts:
rownames(wpr_f014) <- "wpr_f014"

wpr_m15plus <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 151.1578
 ARIMA(0,1,0) with drift         : 155.1099
 ARIMA(0,1,1)                    : 156.1526
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 156.1532
 ARIMA(1,1,0) with drift         : 163.9579
 ARIMA(1,1,1)                    : 166.1515
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 166.0983
 ARIMA(2,1,0) with drift         : 193.0796
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3.101e+09:  log likelihood=-74.08
AIC=150.16   AICc=151.16   BIC=149.95

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 19216.58 51559.25 39981.73 2.127952 4.821061 0.8594709 -0.2359366

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3.101e+09:  log likelihood=-74.08
AIC=150.16   AICc=151.16   BIC=149.95

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 19216.58 51559.25 39981.73 2.127952 4.821061 0.8594709 -0.2359366

Forecasts:
rownames(wpr_m15plus) <- "wpr_m15plus"

wpr_f15plus <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 143.6556
 ARIMA(0,1,0) with drift         : 146.9362
 ARIMA(0,1,1)                    : 148.6553
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 148.6553
 ARIMA(1,1,0) with drift         : 154.5376
 ARIMA(1,1,1)                    : 158.6553
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 158.6417
 ARIMA(2,1,0) with drift         : 182.9765
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 888234487:  log likelihood=-70.33
AIC=142.66   AICc=143.66   BIC=142.45

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 12800.77 27592.46 20122.77 3.026658 5.073829 0.8592559 -0.3366906

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 888234487:  log likelihood=-70.33
AIC=142.66   AICc=143.66   BIC=142.45

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 12800.77 27592.46 20122.77 3.026658 5.073829 0.8592559 -0.3366906

Forecasts:
rownames(wpr_f15plus) <- "wpr_f15plus"

wpr_estimates <- rbind(wpr_m04, wpr_f04, wpr_m514, wpr_f514, wpr_m014, wpr_f014, wpr_m15plus, wpr_f15plus)

#EUR Estimates

eur_m04 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 78.75381
 ARIMA(0,1,0) with drift         : 82.12951
 ARIMA(0,1,1)                    : 83.64837
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 93.2627
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 83.6904
 ARIMA(1,1,0) with drift         : 92.06954
 ARIMA(1,1,1)                    : 93.5146
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 123.2595
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 17815:  log likelihood=-37.88
AIC=77.75   AICc=78.75   BIC=77.55

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -55.44929 123.5715 83.40786 -3.641441 5.183049 0.8598748 -0.1116328

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 17815:  log likelihood=-37.88
AIC=77.75   AICc=78.75   BIC=77.55

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -55.44929 123.5715 83.40786 -3.641441 5.183049 0.8598748 -0.1116328

Forecasts:
rownames(eur_m04) <- "eur_m04"

eur_f04 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 76.68985
 ARIMA(0,1,0) with drift         : 80.33647
 ARIMA(0,1,1)                    : 81.58578
 ARIMA(0,1,1) with drift         : 90.27588
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 81.57517
 ARIMA(1,1,0) with drift         : 90.28316
 ARIMA(1,1,1)                    : 91.57496
 ARIMA(1,1,1) with drift         : 120.2759
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : 120.15
 ARIMA(2,1,1)                    : 121.4982
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12630:  log likelihood=-36.84
AIC=75.69   AICc=76.69   BIC=75.48

Training set error measures:
                    ME    RMSE      MAE       MPE     MAPE      MASE        ACF1
Training set -43.06114 104.045 79.22457 -3.311926 5.619945 0.8595794 0.004291823

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12630:  log likelihood=-36.84
AIC=75.69   AICc=76.69   BIC=75.48

Error measures:
                    ME    RMSE      MAE       MPE     MAPE      MASE        ACF1
Training set -43.06114 104.045 79.22457 -3.311926 5.619945 0.8595794 0.004291823

Forecasts:
rownames(eur_f04) <- "eur_f04"

eur_m514 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 85.509
 ARIMA(0,1,0) with drift         : 86.43678
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 90.11173
 ARIMA(1,1,0) with drift         : 95.54597
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 100.0673
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 54922:  log likelihood=-41.25
AIC=84.51   AICc=85.51   BIC=84.3

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -140.4223 216.9705 141.5777 -4.173495 4.202066 0.8606548 -0.4670638

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 54922:  log likelihood=-41.25
AIC=84.51   AICc=85.51   BIC=84.3

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -140.4223 216.9705 141.5777 -4.173495 4.202066 0.8606548 -0.4670638

Forecasts:
rownames(eur_m514) <- "eur_m514"

eur_f514 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 84.80427
 ARIMA(0,1,0) with drift         : 86.44661
 ARIMA(0,1,1)                    : 89.6705
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 89.57782
 ARIMA(1,1,0) with drift         : 94.21642
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 99.14526
 ARIMA(2,1,0) with drift         : 121.6276
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 48836:  log likelihood=-40.9
AIC=83.8   AICc=84.8   BIC=83.6

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE     MASE       ACF1
Training set -123.4541 204.5953 147.1173 -3.853962 4.643237 0.860335 -0.5094926

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 48836:  log likelihood=-40.9
AIC=83.8   AICc=84.8   BIC=83.6

Error measures:
                    ME     RMSE      MAE       MPE     MAPE     MASE       ACF1
Training set -123.4541 204.5953 147.1173 -3.853962 4.643237 0.860335 -0.5094926

Forecasts:
rownames(eur_f514) <- "eur_f514"

eur_m014 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 87.90563
 ARIMA(0,1,0) with drift         : 87.17066
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 91.3642
 ARIMA(1,1,0) with drift         : 96.87938
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 101.202
 ARIMA(2,1,0) with drift         : 116.0782
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      -224.5000
s.e.    72.4391

sigma^2 estimated as 37788:  log likelihood=-39.59
AIC=83.17   AICc=87.17   BIC=82.75

Training set error measures:
                    ME     RMSE      MAE         MPE     MAPE      MASE       ACF1
Training set 0.8747853 164.2911 147.3034 0.003111067 2.892103 0.6561397 -0.1918559

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      -224.5000
s.e.    72.4391

sigma^2 estimated as 37788:  log likelihood=-39.59
AIC=83.17   AICc=87.17   BIC=82.75

Error measures:
                    ME     RMSE      MAE         MPE     MAPE      MASE       ACF1
Training set 0.8747853 164.2911 147.3034 0.003111067 2.892103 0.6561397 -0.1918559

Forecasts:
rownames(eur_m014) <- "eur_m014"

eur_f014 <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 87.89843
 ARIMA(0,1,0) with drift         : 89.26901
 ARIMA(0,1,1)                    : 92.88049
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 102.6458
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 92.86608
 ARIMA(1,1,0) with drift         : 97.28552
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 132.2977
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 102.1516
 ARIMA(2,1,0) with drift         : 126.8821
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 81791:  log likelihood=-42.45
AIC=86.9   AICc=87.9   BIC=86.69

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -164.3724 264.7762 197.3419 -3.582997 4.247259 0.8605023 -0.5893928

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 81791:  log likelihood=-42.45
AIC=86.9   AICc=87.9   BIC=86.69

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -164.3724 264.7762 197.3419 -3.582997 4.247259 0.8605023 -0.5893928

Forecasts:
rownames(eur_f014) <- "eur_f014"

eur_m15plus <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 125.9029
 ARIMA(0,1,0) with drift         : 120.3483
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : Inf
 ARIMA(1,1,0) with drift         : 128.3634
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 129.0743
 ARIMA(2,1,0) with drift         : 155.9324
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      -6176.333
s.e.   1150.038

sigma^2 estimated as 9528860:  log likelihood=-56.17
AIC=116.35   AICc=120.35   BIC=115.93

Training set error measures:
                   ME     RMSE      MAE         MPE     MAPE      MASE      ACF1
Training set 25.60432 2608.894 2185.795 -0.08003539 1.376032 0.3538985 0.4138192

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      -6176.333
s.e.   1150.038

sigma^2 estimated as 9528860:  log likelihood=-56.17
AIC=116.35   AICc=120.35   BIC=115.93

Error measures:
                   ME     RMSE      MAE         MPE     MAPE      MASE      ACF1
Training set 25.60432 2608.894 2185.795 -0.08003539 1.376032 0.3538985 0.4138192

Forecasts:
rownames(eur_m15plus) <- "eur_m15plus"

eur_f15plus <- out_2020(tot_world, "EUR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 116.7389
 ARIMA(0,1,0) with drift         : 104.0178
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : 113.7773
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : Inf
 ARIMA(1,1,0) with drift         : 113.975
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 148.6417
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : 143.0256
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
           drift
      -3079.5000
s.e.    294.9107

sigma^2 estimated as 627839:  log likelihood=-48.01
AIC=100.02   AICc=104.02   BIC=99.6

Training set error measures:
                   ME     RMSE      MAE         MPE     MAPE      MASE      ACF1
Training set 12.97978 669.6689 474.9798 -0.01880938 0.588106 0.1542393 0.0977167

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
           drift
      -3079.5000
s.e.    294.9107

sigma^2 estimated as 627839:  log likelihood=-48.01
AIC=100.02   AICc=104.02   BIC=99.6

Error measures:
                   ME     RMSE      MAE         MPE     MAPE      MASE      ACF1
Training set 12.97978 669.6689 474.9798 -0.01880938 0.588106 0.1542393 0.0977167

Forecasts:
rownames(eur_f15plus) <- "eur_f15plus"

eur_estimates <- rbind(eur_m04, eur_f04, eur_m514, eur_f514, eur_m014, eur_f014, eur_m15plus, eur_f15plus)

#AMR Estimates

emr_m04 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 110.5715
 ARIMA(0,1,0) with drift         : 106.0002
 ARIMA(0,1,1)                    : 111.9022
 ARIMA(0,1,1) with drift         : 115.5503
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 107.6886
 ARIMA(1,1,0) with drift         : 115.508
 ARIMA(1,1,1)                    : 117.6708
 ARIMA(1,1,1) with drift         : 145.4466
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 117.6505
 ARIMA(2,1,0) with drift         : 145.242
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      1689.1667
s.e.   347.8854

sigma^2 estimated as 871360:  log likelihood=-49
AIC=102   AICc=106   BIC=101.58

Training set error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE      ACF1
Training set 0.532833 788.9232 524.0566 0.6179599 3.986697 0.3102457 0.2009148

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      1689.1667
s.e.   347.8854

sigma^2 estimated as 871360:  log likelihood=-49
AIC=102   AICc=106   BIC=101.58

Error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE      ACF1
Training set 0.532833 788.9232 524.0566 0.6179599 3.986697 0.3102457 0.2009148

Forecasts:
rownames(emr_m04) <- "emr_m04"

emr_f04 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 107.6113
 ARIMA(0,1,0) with drift         : 103.7642
 ARIMA(0,1,1)                    : 110.6912
 ARIMA(0,1,1) with drift         : 113.6269
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 107.7608
 ARIMA(1,1,0) with drift         : 113.5916
 ARIMA(1,1,1)                    : 117.0607
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 116.1464
 ARIMA(2,1,0) with drift         : 143.3858
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      1298.1667
s.e.   288.7444

sigma^2 estimated as 600277:  log likelihood=-47.88
AIC=99.76   AICc=103.76   BIC=99.35

Training set error measures:
                    ME    RMSE     MAE       MPE     MAPE      MASE       ACF1
Training set 0.4144046 654.805 447.462 0.7599193 4.915919 0.3446877 -0.1203015

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      1298.1667
s.e.   288.7444

sigma^2 estimated as 600277:  log likelihood=-47.88
AIC=99.76   AICc=103.76   BIC=99.35

Error measures:
                    ME    RMSE     MAE       MPE     MAPE      MASE       ACF1
Training set 0.4144046 654.805 447.462 0.7599193 4.915919 0.3446877 -0.1203015

Forecasts:
rownames(emr_f04) <- "emr_f04"

emr_m514 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 106.2175
 ARIMA(0,1,0) with drift         : 106.5495
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 108.4115
 ARIMA(1,1,0) with drift         : 116.5418
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 117.5946
 ARIMA(2,1,0) with drift         : 144.3844
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1732475:  log likelihood=-51.61
AIC=105.22   AICc=106.22   BIC=105.01

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 831.4019 1218.597 893.9733 5.034561 5.531396 0.8589015 0.2435649

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1732475:  log likelihood=-51.61
AIC=105.22   AICc=106.22   BIC=105.01

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 831.4019 1218.597 893.9733 5.034561 5.531396 0.8589015 0.2435649

Forecasts:
rownames(emr_m514) <- "emr_m514"

emr_f514 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 106.7125
 ARIMA(0,1,0) with drift         : 109.5098
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 110.6453
 ARIMA(1,1,0) with drift         : 119.4974
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 119.929
 ARIMA(2,1,0) with drift         : 148.2944
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1881467:  log likelihood=-51.86
AIC=105.71   AICc=106.71   BIC=105.5

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 654.1529 1269.916 998.7243 3.163926 5.159425 0.8592409 0.1308076

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 1881467:  log likelihood=-51.86
AIC=105.71   AICc=106.71   BIC=105.5

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 654.1529 1269.916 998.7243 3.163926 5.159425 0.8592409 0.1308076

Forecasts:
rownames(emr_f514) <- "emr_f514"

emr_m014 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 117.0617
 ARIMA(0,1,0) with drift         : 115.5705
 ARIMA(0,1,1)                    : 118.5877
 ARIMA(0,1,1) with drift         : 125.0624
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 116.8657
 ARIMA(1,1,0) with drift         : 125.2341
 ARIMA(1,1,1)                    : 126.7096
 ARIMA(1,1,1) with drift         : 155.0521
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 126.5296
 ARIMA(2,1,0) with drift         : 154.4364
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      2641.8333
s.e.   772.3193

sigma^2 estimated as 4294599:  log likelihood=-53.79
AIC=111.57   AICc=115.57   BIC=111.15

Training set error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE      ACF1
Training set 2.240166 1751.448 1276.383 0.1088444 4.518639 0.4637739 0.1764573

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      2641.8333
s.e.   772.3193

sigma^2 estimated as 4294599:  log likelihood=-53.79
AIC=111.57   AICc=115.57   BIC=111.15

Error measures:
                   ME     RMSE      MAE       MPE     MAPE      MASE      ACF1
Training set 2.240166 1751.448 1276.383 0.1088444 4.518639 0.4637739 0.1764573

Forecasts:
rownames(emr_m014) <- "emr_m014"

emr_f014 <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 114.8804
 ARIMA(0,1,0) with drift         : 114.8509
 ARIMA(0,1,1)                    : 116.6524
 ARIMA(0,1,1) with drift         : 124.3216
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 115.7161
 ARIMA(1,1,0) with drift         : 124.5359
 ARIMA(1,1,1)                    : 125.4571
 ARIMA(1,1,1) with drift         : 154.3157
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 125.0684
 ARIMA(2,1,0) with drift         : 153.5805
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      2041.0000
s.e.   727.3703

sigma^2 estimated as 3809285:  log likelihood=-53.43
AIC=110.85   AICc=114.85   BIC=110.43

Training set error measures:
                   ME    RMSE      MAE        MPE     MAPE      MASE     ACF1
Training set 2.761856 1649.52 1225.619 0.05313471 4.220174 0.5291965 0.162671

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
          drift
      2041.0000
s.e.   727.3703

sigma^2 estimated as 3809285:  log likelihood=-53.43
AIC=110.85   AICc=114.85   BIC=110.43

Error measures:
                   ME    RMSE      MAE        MPE     MAPE      MASE     ACF1
Training set 2.761856 1649.52 1225.619 0.05313471 4.220174 0.5291965 0.162671

Forecasts:
rownames(emr_f014) <- "emr_f014"

emr_m15plus <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 133.2224
 ARIMA(0,1,0) with drift         : 136.4537
 ARIMA(0,1,1)                    : 138.0252
 ARIMA(0,1,1) with drift         : 146.4274
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : 176.2163
 ARIMA(1,1,0)                    : 137.8248
 ARIMA(1,1,0) with drift         : 146.4201
 ARIMA(1,1,1)                    : 147.6019
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 147.0673
 ARIMA(2,1,0) with drift         : 176.3108
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 156081396:  log likelihood=-65.11
AIC=132.22   AICc=133.22   BIC=132.01

Training set error measures:
                   ME     RMSE      MAE      MPE    MAPE      MASE      ACF1
Training set 5437.489 11566.51 8570.917 2.486889 3.87156 0.8598432 -0.120371

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 156081396:  log likelihood=-65.11
AIC=132.22   AICc=133.22   BIC=132.01

Error measures:
                   ME     RMSE      MAE      MPE    MAPE      MASE      ACF1
Training set 5437.489 11566.51 8570.917 2.486889 3.87156 0.8598432 -0.120371

Forecasts:
rownames(emr_m15plus) <- "emr_m15plus"

emr_f15plus <- out_2020(tot_world, "EMR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 131.2118
 ARIMA(0,1,0) with drift         : 135.5512
 ARIMA(0,1,1)                    : 136.2115
 ARIMA(0,1,1) with drift         : 145.4442
 ARIMA(0,1,2)                    : 145.3951
 ARIMA(0,1,2) with drift         : 175.3264
 ARIMA(1,1,0)                    : 136.2112
 ARIMA(1,1,0) with drift         : 145.4197
 ARIMA(1,1,1)                    : 146.1754
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 145.6273
 ARIMA(2,1,0) with drift         : 175.2787
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 111641770:  log likelihood=-64.11
AIC=130.21   AICc=131.21   BIC=130

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 2949.988 9782.277 7055.131 1.426539 3.469009 0.8602944 -0.1560189

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 111641770:  log likelihood=-64.11
AIC=130.21   AICc=131.21   BIC=130

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 2949.988 9782.277 7055.131 1.426539 3.469009 0.8602944 -0.1560189

Forecasts:
rownames(emr_f15plus) <- "emr_f15plus"

emr_estimates <- rbind(emr_m04, emr_f04, emr_m514, emr_f514, emr_m014, emr_f014, emr_m15plus, emr_f15plus)

#WPR Estimates

wpr_m04 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 117.987
 ARIMA(0,1,0) with drift         : 120.6596
 ARIMA(0,1,1)                    : 122.6039
 ARIMA(0,1,1) with drift         : 130.6566
 ARIMA(0,1,2)                    : 132.1259
 ARIMA(0,1,2) with drift         : 160.3447
 ARIMA(1,1,0)                    : 122.4011
 ARIMA(1,1,0) with drift         : 130.6558
 ARIMA(1,1,1)                    : 132.1779
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 161.9353
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 131.972
 ARIMA(2,1,0) with drift         : 160.5433
 ARIMA(2,1,1)                    : 161.9623
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12318696:  log likelihood=-57.49
AIC=116.99   AICc=117.99   BIC=116.78

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1705.945 3249.443 2805.374 20.95097 30.38595 0.8571698 -0.1090836

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 12318696:  log likelihood=-57.49
AIC=116.99   AICc=117.99   BIC=116.78

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1705.945 3249.443 2805.374 20.95097 30.38595 0.8571698 -0.1090836

Forecasts:
rownames(wpr_m04) <- "wpr_m04"

wpr_f04 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 115.7528
 ARIMA(0,1,0) with drift         : 118.5332
 ARIMA(0,1,1)                    : 120.4465
 ARIMA(0,1,1) with drift         : 128.5172
 ARIMA(0,1,2)                    : 130.0029
 ARIMA(0,1,2) with drift         : 158.2683
 ARIMA(1,1,0)                    : 120.2961
 ARIMA(1,1,0) with drift         : 128.5132
 ARIMA(1,1,1)                    : 130.083
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 159.8347
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 129.8787
 ARIMA(2,1,0) with drift         : 158.4132
 ARIMA(2,1,1)                    : 159.8769
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 8488853:  log likelihood=-56.38
AIC=114.75   AICc=115.75   BIC=114.54

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1388.774 2697.436 2351.631 21.47588 31.76637 0.8571647 -0.1220096

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 8488853:  log likelihood=-56.38
AIC=114.75   AICc=115.75   BIC=114.54

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 1388.774 2697.436 2351.631 21.47588 31.76637 0.8571647 -0.1220096

Forecasts:
rownames(wpr_f04) <- "wpr_f04"

wpr_m514 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 121.504
 ARIMA(0,1,0) with drift         : 123.8299
 ARIMA(0,1,1)                    : 126.3435
 ARIMA(0,1,1) with drift         : 133.7516
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 126.0875
 ARIMA(1,1,0) with drift         : 133.6501
 ARIMA(1,1,1)                    : 135.4448
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 22137609:  log likelihood=-59.25
AIC=120.5   AICc=121.5   BIC=120.3

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 2418.811 4356.041 3571.382 17.62742 23.71631 0.8572347 -0.263211

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 22137609:  log likelihood=-59.25
AIC=120.5   AICc=121.5   BIC=120.3

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE      ACF1
Training set 2418.811 4356.041 3571.382 17.62742 23.71631 0.8572347 -0.263211

Forecasts:
rownames(wpr_m514) <- "wpr_m514"

wpr_f514 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 119.8234
 ARIMA(0,1,0) with drift         : 122.1114
 ARIMA(0,1,1)                    : 124.7307
 ARIMA(0,1,1) with drift         : 131.9174
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 124.5719
 ARIMA(1,1,0) with drift         : 131.6532
 ARIMA(1,1,1)                    : 133.8761
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 16729524:  log likelihood=-58.41
AIC=118.82   AICc=119.82   BIC=118.62

Training set error measures:
                   ME     RMSE    MAE      MPE    MAPE      MASE       ACF1
Training set 2114.529 3786.765 3049.1 17.08469 22.6313 0.8572513 -0.3350534

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 16729524:  log likelihood=-58.41
AIC=118.82   AICc=119.82   BIC=118.62

Error measures:
                   ME     RMSE    MAE      MPE    MAPE      MASE       ACF1
Training set 2114.529 3786.765 3049.1 17.08469 22.6313 0.8572513 -0.3350534

Forecasts:
rownames(wpr_f514) <- "wpr_f514"

wpr_m014 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 127.329
 ARIMA(0,1,0) with drift         : 129.3522
 ARIMA(0,1,1)                    : 132.0091
 ARIMA(0,1,1) with drift         : 139.3173
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 131.6732
 ARIMA(1,1,0) with drift         : 139.2927
 ARIMA(1,1,1)                    : 141.1479
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 140.1957
 ARIMA(2,1,0) with drift         : 168.6569
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 58446545:  log likelihood=-62.16
AIC=126.33   AICc=127.33   BIC=126.12

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 4098.811 7077.926 6008.525 18.28722 24.50654 0.8572381 -0.1974907

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 58446545:  log likelihood=-62.16
AIC=126.33   AICc=127.33   BIC=126.12

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 4098.811 7077.926 6008.525 18.28722 24.50654 0.8572381 -0.1974907

Forecasts:
rownames(wpr_m014) <- "wpr_m014"

wpr_f014 <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 125.4245
 ARIMA(0,1,0) with drift         : 127.5424
 ARIMA(0,1,1)                    : 130.1948
 ARIMA(0,1,1) with drift         : 137.4582
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 129.9333
 ARIMA(1,1,0) with drift         : 137.3915
 ARIMA(1,1,1)                    : 139.3634
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 138.0696
 ARIMA(2,1,0) with drift         : 166.547
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 42550393:  log likelihood=-61.21
AIC=124.42   AICc=125.42   BIC=124.22

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 3453.738 6039.186 5152.595 18.00039 24.46396 0.8572418 -0.2381519

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 42550393:  log likelihood=-61.21
AIC=124.42   AICc=125.42   BIC=124.22

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 3453.738 6039.186 5152.595 18.00039 24.46396 0.8572418 -0.2381519

Forecasts:
rownames(wpr_f014) <- "wpr_f014"

wpr_m15plus <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 151.1578
 ARIMA(0,1,0) with drift         : 155.1099
 ARIMA(0,1,1)                    : 156.1526
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 156.1532
 ARIMA(1,1,0) with drift         : 163.9579
 ARIMA(1,1,1)                    : 166.1515
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 166.0983
 ARIMA(2,1,0) with drift         : 193.0796
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3.101e+09:  log likelihood=-74.08
AIC=150.16   AICc=151.16   BIC=149.95

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 19216.58 51559.25 39981.73 2.127952 4.821061 0.8594709 -0.2359366

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 3.101e+09:  log likelihood=-74.08
AIC=150.16   AICc=151.16   BIC=149.95

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 19216.58 51559.25 39981.73 2.127952 4.821061 0.8594709 -0.2359366

Forecasts:
rownames(wpr_m15plus) <- "wpr_m15plus"

wpr_f15plus <- out_2020(tot_world, "WPR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 143.6556
 ARIMA(0,1,0) with drift         : 146.9362
 ARIMA(0,1,1)                    : 148.6553
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 148.6553
 ARIMA(1,1,0) with drift         : 154.5376
 ARIMA(1,1,1)                    : 158.6553
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 158.6417
 ARIMA(2,1,0) with drift         : 182.9765
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 888234487:  log likelihood=-70.33
AIC=142.66   AICc=143.66   BIC=142.45

Training set error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 12800.77 27592.46 20122.77 3.026658 5.073829 0.8592559 -0.3366906

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 888234487:  log likelihood=-70.33
AIC=142.66   AICc=143.66   BIC=142.45

Error measures:
                   ME     RMSE      MAE      MPE     MAPE      MASE       ACF1
Training set 12800.77 27592.46 20122.77 3.026658 5.073829 0.8592559 -0.3366906

Forecasts:
rownames(wpr_f15plus) <- "wpr_f15plus"

wpr_estimates <- rbind(wpr_m04, wpr_f04, wpr_m514, wpr_f514, wpr_m014, wpr_f014, wpr_m15plus, wpr_f15plus)

#AMR Estimates

amr_m04 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_m04") 

 ARIMA(0,1,0)                    : 81.20312
 ARIMA(0,1,0) with drift         : 85.62773
 ARIMA(0,1,1)                    : Inf
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 83.36317
 ARIMA(1,1,0) with drift         : 93.10285
 ARIMA(1,1,1)                    : Inf
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 91.99538
 ARIMA(2,1,0) with drift         : 121.9132
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 26796:  log likelihood=-39.1
AIC=80.2   AICc=81.2   BIC=79.99

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -42.09157 151.5522 120.1941 -2.150665 5.588892 0.8595529 -0.4510363

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 26796:  log likelihood=-39.1
AIC=80.2   AICc=81.2   BIC=79.99

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -42.09157 151.5522 120.1941 -2.150665 5.588892 0.8595529 -0.4510363

Forecasts:
rownames(amr_m04) <- "amr_m04"

amr_f04 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_f04")

 ARIMA(0,1,0)                    : 79.78439
 ARIMA(0,1,0) with drift         : 84.32867
 ARIMA(0,1,1)                    : 81.41097
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 80.0876
 ARIMA(1,1,0) with drift         : 89.04987
 ARIMA(1,1,1)                    : 89.05019
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 88.27209
 ARIMA(2,1,0) with drift         : 116.0278
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 21153:  log likelihood=-38.39
AIC=78.78   AICc=79.78   BIC=78.58

Training set error measures:
                    ME    RMSE      MAE       MPE    MAPE      MASE       ACF1
Training set -33.42686 134.653 118.8589 -2.025789 6.38553 0.8592207 -0.7441053

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 21153:  log likelihood=-38.39
AIC=78.78   AICc=79.78   BIC=78.58

Error measures:
                    ME    RMSE      MAE       MPE    MAPE      MASE       ACF1
Training set -33.42686 134.653 118.8589 -2.025789 6.38553 0.8592207 -0.7441053

Forecasts:
rownames(amr_f04) <- "amr_f04"

amr_m514 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_m514")

 ARIMA(0,1,0)                    : 80.43822
 ARIMA(0,1,0) with drift         : 82.89086
 ARIMA(0,1,1)                    : 85.35448
 ARIMA(0,1,1) with drift         : 92.87508
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 85.25797
 ARIMA(1,1,0) with drift         : 92.87029
 ARIMA(1,1,1)                    : 94.93816
 ARIMA(1,1,1) with drift         : 122.6887
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 94.65097
 ARIMA(2,1,0) with drift         : 122.7689
 ARIMA(2,1,1)                    : 124.598
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 23590:  log likelihood=-38.72
AIC=79.44   AICc=80.44   BIC=79.23

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -76.94743 142.1967 104.7669 -2.600088 3.547003 0.8610975 -0.2447804

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 23590:  log likelihood=-38.72
AIC=79.44   AICc=80.44   BIC=79.23

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -76.94743 142.1967 104.7669 -2.600088 3.547003 0.8610975 -0.2447804

Forecasts:
rownames(amr_m514) <- "amr_m514"

amr_f514 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_f514")

 ARIMA(0,1,0)                    : 81.77671
 ARIMA(0,1,0) with drift         : 85.53773
 ARIMA(0,1,1)                    : 85.39397
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 84.22718
 ARIMA(1,1,0) with drift         : 92.24655
 ARIMA(1,1,1)                    : 93.97957
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : Inf
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 29485:  log likelihood=-39.39
AIC=80.78   AICc=81.78   BIC=80.57

Training set error measures:
                  ME     RMSE     MAE       MPE    MAPE      MASE      ACF1
Training set -63.094 158.9745 120.906 -2.160652 3.97228 0.8605409 -0.510281

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 29485:  log likelihood=-39.39
AIC=80.78   AICc=81.78   BIC=80.57

Error measures:
                  ME     RMSE     MAE       MPE    MAPE      MASE      ACF1
Training set -63.094 158.9745 120.906 -2.160652 3.97228 0.8605409 -0.510281

Forecasts:
rownames(amr_f514) <- "amr_f514"

amr_m014 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_m014")

 ARIMA(0,1,0)                    : 84.45934
 ARIMA(0,1,0) with drift         : 87.54733
 ARIMA(0,1,1)                    : 89.18806
 ARIMA(0,1,1) with drift         : 97.48774
 ARIMA(0,1,2)                    : 99.10081
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 89.11319
 ARIMA(1,1,0) with drift         : 97.52031
 ARIMA(1,1,1)                    : 99.10554
 ARIMA(1,1,1) with drift         : 127.4837
 ARIMA(1,1,2)                    : 129.0897
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : Inf
 ARIMA(2,1,0) with drift         : 127.3181
 ARIMA(2,1,1)                    : 129.1039
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 46111:  log likelihood=-40.73
AIC=83.46   AICc=84.46   BIC=83.25

Training set error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -95.30943 198.8054 97.83343 -1.802642 1.847534 0.8645075 -0.1921184

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 46111:  log likelihood=-40.73
AIC=83.46   AICc=84.46   BIC=83.25

Error measures:
                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
Training set -95.30943 198.8054 97.83343 -1.802642 1.847534 0.8645075 -0.1921184

Forecasts:
rownames(amr_m014) <- "amr_m014"

amr_f014 <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_f014")

 ARIMA(0,1,0)                    : 81.98907
 ARIMA(0,1,0) with drift         : 85.52465
 ARIMA(0,1,1)                    : 86.57645
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 86.05811
 ARIMA(1,1,0) with drift         : 93.61714
 ARIMA(1,1,1)                    : 95.78387
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 95.5139
 ARIMA(2,1,0) with drift         : 123.5324
 ARIMA(2,1,1)                    : 125.511
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 30550:  log likelihood=-39.49
AIC=80.99   AICc=81.99   BIC=80.78

Training set error measures:
                  ME     RMSE     MAE       MPE     MAPE      MASE       ACF1
Training set -68.933 161.8208 117.067 -1.369866 2.307828 0.8629017 -0.5168809

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 30550:  log likelihood=-39.49
AIC=80.99   AICc=81.99   BIC=80.78

Error measures:
                  ME     RMSE     MAE       MPE     MAPE      MASE       ACF1
Training set -68.933 161.8208 117.067 -1.369866 2.307828 0.8629017 -0.5168809

Forecasts:
rownames(amr_f014) <- "amr_f014"

amr_m15plus <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_m15plus")

 ARIMA(0,1,0)                    : 121.5033
 ARIMA(0,1,0) with drift         : 121.2176
 ARIMA(0,1,1)                    : 124.9374
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : 133.9693
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 124.2796
 ARIMA(1,1,0) with drift         : 130.5986
 ARIMA(1,1,1)                    : 134.1506
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : 163.6115
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 134.0446
 ARIMA(2,1,0) with drift         : 160.3891
 ARIMA(2,1,1)                    : 164.0426
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0) with drift         

Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
         drift
      3600.333
s.e.  1236.437

sigma^2 estimated as 11010114:  log likelihood=-56.61
AIC=117.22   AICc=121.22   BIC=116.8

Training set error measures:
                   ME     RMSE      MAE        MPE     MAPE      MASE       ACF1
Training set 17.92894 2804.348 2433.643 -0.0223538 1.731512 0.6560275 -0.2334609

Forecast method: ARIMA(0,1,0) with drift

Model Information:
Series: . 
ARIMA(0,1,0) with drift 

Coefficients:
         drift
      3600.333
s.e.  1236.437

sigma^2 estimated as 11010114:  log likelihood=-56.61
AIC=117.22   AICc=121.22   BIC=116.8

Error measures:
                   ME     RMSE      MAE        MPE     MAPE      MASE       ACF1
Training set 17.92894 2804.348 2433.643 -0.0223538 1.731512 0.6560275 -0.2334609

Forecasts:
rownames(amr_m15plus) <- "amr_m15plus"

amr_f15plus <- out_2020(tot_world, "AMR") %>% arima_TB("newrel_f15plus")

 ARIMA(0,1,0)                    : 107.077
 ARIMA(0,1,0) with drift         : 111.465
 ARIMA(0,1,1)                    : 111.6485
 ARIMA(0,1,1) with drift         : Inf
 ARIMA(0,1,2)                    : Inf
 ARIMA(0,1,2) with drift         : Inf
 ARIMA(1,1,0)                    : 111.8425
 ARIMA(1,1,0) with drift         : 120.2414
 ARIMA(1,1,1)                    : 121.6324
 ARIMA(1,1,1) with drift         : Inf
 ARIMA(1,1,2)                    : Inf
 ARIMA(1,1,2) with drift         : Inf
 ARIMA(2,1,0)                    : 120.2146
 ARIMA(2,1,0) with drift         : 144.5938
 ARIMA(2,1,1)                    : Inf
 ARIMA(2,1,1) with drift         : Inf
 ARIMA(2,1,2)                    : Inf
 ARIMA(2,1,2) with drift         : Inf



 Best model: ARIMA(0,1,0)                    

Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 2e+06:  log likelihood=-52.04
AIC=106.08   AICc=107.08   BIC=105.87

Training set error measures:
                   ME     RMSE      MAE       MPE    MAPE      MASE       ACF1
Training set 388.1107 1309.374 1138.968 0.4951078 1.50792 0.8652579 -0.2900684

Forecast method: ARIMA(0,1,0)

Model Information:
Series: . 
ARIMA(0,1,0) 

sigma^2 estimated as 2e+06:  log likelihood=-52.04
AIC=106.08   AICc=107.08   BIC=105.87

Error measures:
                   ME     RMSE      MAE       MPE    MAPE      MASE       ACF1
Training set 388.1107 1309.374 1138.968 0.4951078 1.50792 0.8652579 -0.2900684

Forecasts:
rownames(amr_f15plus) <- "amr_f15plus"

amr_estimates <- rbind(amr_m04, amr_f04, amr_m514, amr_f514, amr_m014, amr_f014, amr_m15plus, amr_f15plus)

Combining the data for 2020 with the model estimates

##AFR difference calculations 
afr_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "AFR") %>% t() 
afr_2020 <- as.data.frame(afr_2020[c(3:10), ])

rownames(afr_2020) <- c("afr_m04", "afr_f04", "afr_m514", "afr_f514", "afr_m014", "afr_f014", "afr_m15plus", "afr_f15plus")
colnames(afr_2020) <- "notif_2020"

est_afr_2020 <- cbind(afr_2020, afr_estimates)
colnames(est_afr_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_afr_2020$notif_2020 <- as.numeric(est_afr_2020$notif_2020)

dif_afr <- mutate(est_afr_2020, "Difference" = notif_2020 - est_2020, "afr_perc" = 100*(Difference/est_2020))

##SEA difference calculations 
sea_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "SEA") %>% t() 
sea_2020 <- as.data.frame(sea_2020[c(3:10), ])

rownames(sea_2020) <- c("sea_m04", "sea_f04", "sea_m514", "sea_f514", "sea_m014", "sea_f014", "sea_m15plus", "sea_f15plus")
colnames(sea_2020) <- "notif_2020"
est_sea_2020 <- cbind(sea_2020, sea_estimates)
colnames(est_sea_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_sea_2020$notif_2020 <- as.numeric(est_sea_2020$notif_2020)

dif_sea <- mutate(est_sea_2020, "Difference" = notif_2020 - est_2020, "sea_perc" = 100*(Difference/est_2020))

#WPR difference calculations 
wpr_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "WPR") %>% t() 
wpr_2020 <- as.data.frame(wpr_2020[c(3:10), ])

rownames(wpr_2020) <- c("wpr_m04", "wpr_f04", "wpr_m514", "wpr_f514", "wpr_m014", "wpr_f014", "wpr_m15plus", "wpr_f15plus")
colnames(wpr_2020) <- "wpr_2020"
est_wpr_2020 <- cbind(wpr_2020, wpr_estimates)
colnames(est_wpr_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_wpr_2020$notif_2020 <- as.numeric(est_wpr_2020$notif_2020)

dif_wpr <- mutate(est_wpr_2020, "Difference" = notif_2020 - est_2020, "wpr_perc" = 100*(Difference/est_2020))

#WPR difference calculations 
eur_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "EUR") %>% t() 
eur_2020 <- as.data.frame(eur_2020[c(3:10), ])

rownames(eur_2020) <- c("eur_m04", "eur_f04", "eur_m514", "eur_f514", "eur_m014", "eur_f014", "eur_m15plus", "eur_f15plus")
colnames(eur_2020) <- "eur_2020"
est_eur_2020 <- cbind(eur_2020, eur_estimates)
colnames(est_eur_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_eur_2020$notif_2020 <- as.numeric(est_eur_2020$notif_2020)

dif_eur <- mutate(est_eur_2020, "Difference" = notif_2020 - est_2020, "eur_perc" = 100*(Difference/est_2020)) 

#AMR difference calculations
amr_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "AMR") %>% t() 
amr_2020 <- as.data.frame(amr_2020[c(3:10), ])

rownames(amr_2020) <- c("amr_m04", "amr_f04", "amr_m514", "amr_f514", "amr_m014", "amr_f014", "amr_m15plus", "amr_f15plus")
colnames(eur_2020) <- "amr_2020"
est_amr_2020 <- cbind(amr_2020, amr_estimates)
colnames(est_amr_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_amr_2020$notif_2020 <- as.numeric(est_amr_2020$notif_2020)

dif_amr <- mutate(est_amr_2020, "Difference" = notif_2020 - est_2020, "amr_perc" = 100*(Difference/est_2020)) 

#EMR difference calculations
emr_2020 <- tot_world %>% filter(year == 2020) %>% filter(g_whoregion == "EMR") %>% t() 
emr_2020 <- as.data.frame(emr_2020[c(3:10), ])

rownames(emr_2020) <- c("emr_m04", "emr_f04", "emr_m514", "emr_f514", "emr_m014", "emr_f014", "emr_m15plus", "emr_f15plus")
colnames(emr_2020) <- "emr_2020"
est_emr_2020 <- cbind(emr_2020, emr_estimates)
colnames(est_emr_2020) <- c("notif_2020", "est_2020", "Lo_80", "Hi_80", "Lo_95", "Hi_95")
est_emr_2020$notif_2020 <- as.numeric(est_emr_2020$notif_2020)

dif_emr <- mutate(est_emr_2020, "Difference" = notif_2020 - est_2020, "emr_perc" = 100*(Difference/est_2020)) 

#Combined data frame with difference data 
combined_dif <- data.frame(dif_afr[, c(7,8)], dif_amr[,c(7,8)], dif_emr[, c(7,8)], dif_eur[,c(7:8)], dif_sea[,c(7:8)], dif_wpr[,c(7:8)])
combined_dif$group <- as.vector(rownames(combined_dif))
combined_dif$group <- c("m04", "f04", "m514", "f514", "m014", "f014", "m15plus", "f15plus")
rownames(combined_dif) <- c(1:8)
combined_dif <- combined_dif[, c(13,1:12)]

colnames(combined_dif) <- c("group", "AFR_dif", "AFR_perc", "AMR_dif", "AMR_perc", "EMR_dif", "EMR_perc", "EUR_dif", "EUR_perc", "SEA_dif", "SEA_perc", "WPR_dif", "WPR_perc")

#isolating only the percentage data to be able to plot a bar plot 
bar_data <- combined_dif[, c(1,3,5,7,9,11,13)]
bar_newgroup <- str_split_fixed(bar_data$group, "", 2)
bar_data2 <- cbind(bar_data, bar_newgroup)
colnames(bar_data2) <- c("group", "AFR", "AMR", "EMR", "EUR", "SEA", "WPR", "sex", "age_group")
bar_data2 <- bar_data2[, c(9,8,2:7)]


piv_dif <- pivot_longer(bar_data2, cols = c("AFR", "AMR", "EMR", "EUR", "SEA", "WPR"), names_to = "g_whoregion", values_to = "value")

library(dplyr)
library(ggplot2)
piv_three <- filter(piv_dif, age_group != "014")

##Attempt at drawing plots  including 0-14 
arima_dif <- ggplot(piv_dif, aes(x = g_whoregion, y = value, fill = sex)) + facet_wrap(~piv_dif$age_group) + geom_bar(stat = "identity", position = "dodge")

##Attempt excluding 0-14 
piv_copy <- piv_three
piv_copy$age_group <- factor(piv_copy$age_group, levels = c("04", "514", "15plus"))
arima_copy <- ggplot(piv_copy, aes(x = g_whoregion, y = value, fill = sex)) + facet_wrap(~piv_copy$age_group) + geom_bar(stat = "identity", position = "dodge")
arima_copy


arima_three <- ggplot(piv_three, aes(x = g_whoregion, y = value, fill = sex)) + facet_wrap(~piv_three$age_group) + geom_bar(stat = "identity", position = "dodge")
arima_three

NA
#Attempt at the forecasting models 
#Rearranging data for 0-4 males 

males_04 <- select(perc_world, c(g_whoregion, year, newrel_m04)) 
piv_na <- pivot_wider(males_04, names_from = "year", values_from = "newrel_m04")
piv_na$`2020` <- NA
males_back <- pivot_longer(piv_na, cols = c(as.vector(colnames(piv_na[,2:9]))), names_to = "year")
males_back$year <- as.numeric(males_back$year)
males_no_pivot <- males_04
males_pivot <- pivot_wider(males_04, names_from = "g_whoregion", values_from = "newrel_m04")

select(afr_m04, "Point Forecast")

fore2020 <- function(df){
  a <- select(df, "Point Forecast")
  b <- "2020"
  colnames(a) <- "Number"
  rownames(a) <- NULL
  a$Year <- b
  return(a)
}

#males 04 
fore_afrm04 <- fore2020(afr_m04)
fore_amrm04 <- fore2020(amr_m04)
fore_emrm04 <- fore2020(emr_m04)
fore_eurm04 <- fore2020(eur_m04)
fore_seam04 <- fore2020(sea_m04)
fore_wprm04 <- fore2020(wpr_m04)

bound_fore <- cbind(fore_afrm04, fore_amrm04$Number, fore_emrm04$Number, fore_eurm04$Number, fore_seam04$Number, fore_wprm04$Number)

colnames(bound_fore) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_fore <- bound_fore[, c(2, 1, 3:7)]

#females04
fore_afrf04 <- fore2020(afr_f04)
fore_amrf04 <- fore2020(amr_f04)
fore_emrf04 <- fore2020(emr_f04)
fore_eurf04 <- fore2020(eur_f04)
fore_seaf04 <- fore2020(sea_f04)
fore_wprf04 <- fore2020(wpr_f04)

bound_f04 <- cbind(fore_afrf04, fore_amrf04$Number, fore_emrf04$Number, fore_eurf04$Number, fore_seaf04$Number, fore_wprf04$Number)

colnames(bound_f04) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_f04 <- bound_f04[, c(2, 1, 3:7)]

#males 514 
fore_afrm514 <- fore2020(afr_m514)
fore_amrm514 <- fore2020(amr_m514)
fore_emrm514 <- fore2020(emr_m514)
fore_eurm514 <- fore2020(eur_m514)
fore_seam514 <- fore2020(sea_m514)
fore_wprm514 <- fore2020(wpr_m514)

bound_m514 <- cbind(fore_afrm514, fore_amrm514$Number, fore_emrm514$Number, fore_eurm514$Number, fore_seam514$Number, fore_wprm514$Number)

colnames(bound_m514) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_m514 <- bound_m514[, c(2, 1, 3:7)]

#females 514 
fore_afrf514 <- fore2020(afr_f514)
fore_amrf514 <- fore2020(amr_f514)
fore_emrf514 <- fore2020(emr_f514)
fore_eurf514 <- fore2020(eur_f514)
fore_seaf514 <- fore2020(sea_f514)
fore_wprf514 <- fore2020(wpr_f514)

bound_f514 <- cbind(fore_afrf514, fore_amrf514$Number, fore_emrf514$Number, fore_eurf514$Number, fore_seaf514$Number, fore_wprf514$Number)

colnames(bound_f514) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_f514 <- bound_f514[, c(2, 1, 3:7)]

#males 15plus 
fore_afrm15plus <- fore2020(afr_m15plus)
fore_amrm15plus <- fore2020(amr_m15plus)
fore_emrm15plus <- fore2020(emr_m15plus)
fore_eurm15plus <- fore2020(eur_m15plus)
fore_seam15plus <- fore2020(sea_m15plus)
fore_wprm15plus <- fore2020(wpr_m15plus)

bound_m15plus <- cbind(fore_afrm15plus, fore_amrm15plus$Number, fore_emrm15plus$Number, fore_eurm15plus$Number, fore_seam15plus$Number, fore_wprm15plus$Number)

colnames(bound_m15plus) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_m15plus <- bound_m15plus[, c(2, 1, 3:7)]

#females 15plus 
fore_afrf15plus <- fore2020(afr_f15plus)
fore_amrf15plus <- fore2020(amr_f15plus)
fore_emrf15plus <- fore2020(emr_f15plus)
fore_eurf15plus <- fore2020(eur_f15plus)
fore_seaf15plus <- fore2020(sea_f15plus)
fore_wprf15plus <- fore2020(wpr_f15plus)

bound_f15plus <- cbind(fore_afrf15plus, fore_amrf15plus$Number, fore_emrf15plus$Number, fore_eurf15plus$Number, fore_seaf15plus$Number, fore_wprf15plus$Number)

colnames(bound_f15plus) <- c("AFR", "Year", "AMR", "EMR", "EUR", "SEA", "WPR")
bound_f15plus <- bound_f15plus[, c(2, 1, 3:7)]

Attempt 2 at creating the time series analyses

#males04 plot
males_04 <- select(perc_world, c(g_whoregion, year, newrel_m04)) 
gg_males04 <- ggplot(males_04, aes(x = year, y = newrel_m04, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 27043, col = "red") + geom_point(x = 2020, y = 2062, col = "brown") + geom_point(x = 2020, y = 17243.17, col = "green") + geom_point(x = 2020, y = 1465, col = "turquoise2") + geom_point(x = 2020, y = 58951.83, col = "blue") + geom_point(x = 2020, y = 12558, col = "pink") + scale_y_continuous(limits = c(0, 60000)) + labs(title = "Notifications Time Series for Males 0-4 yrs")

#females 04 plot
females_04 <- select(perc_world, c(g_whoregion, year, newrel_f04)) 
gg_females04 <- ggplot(females_04, aes(x = year, y = newrel_f04, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 23790, col = "red") + geom_point(x = 2020, y = 1776, col = "brown") + geom_point(x = 2020, y = 13286.17, col = "green") + geom_point(x = 2020, y = 1269, col = "turquoise2") + geom_point(x = 2020, y = 43694, col = "blue") + geom_point(x = 2020, y = 10140, col = "pink") + scale_y_continuous(limits = c(0, 50000)) + labs(title = "Notifications Time Series for Females 0-4 yrs")

#males 514 plot 
males_514 <- select(perc_world, c(g_whoregion, year, newrel_m514)) 
gg_males514 <- ggplot(males_514, aes(x = year, y = newrel_m514, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 32352, col = "red") + geom_point(x = 2020, y = 2826, col = "brown") + geom_point(x = 2020, y = 18620, col = "green") + geom_point(x = 2020, y = 3057, col = "turquoise2") + geom_point(x = 2020, y = 82535, col = "blue") + geom_point(x = 2020, y = 19606, col = "pink") + scale_y_continuous(limits = c(0, 90000)) + labs(title = "Notifications Time Series for Males 5-14 yrs")

#females514
females_514 <- select(perc_world, c(g_whoregion, year, newrel_f514)) 
gg_females514 <- ggplot(females_514, aes(x = year, y = newrel_f514, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 32411, col = "red") + geom_point(x = 2020, y = 2897, col = "brown") + geom_point(x = 2020, y = 21632, col = "green") + geom_point(x = 2020, y = 2953, col = "turquoise2") + geom_point(x = 2020, y = 87086, col = "blue") + geom_point(x = 2020, y = 17500, col = "pink") + scale_y_continuous(limits = c(0, 100000)) + labs(title = "Notifications Time Series for Females 5-14 yrs")

#males 15 plus plot 
males_15plus <- select(perc_world, c(g_whoregion, year, newrel_m15plus)) 
gg_males15plus <- ggplot(males_15plus, aes(x = year, y = newrel_m15plus, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 661953, col = "red") + geom_point(x = 2020, y = 154305.3, col = "brown") + geom_point(x = 2020, y = 226294, col = "green") + geom_point(x = 2020, y = 129819.7, col = "turquoise2") + geom_point(x = 2020, y = 1931341, col = "blue") + geom_point(x = 2020, y = 891849, col = "pink") + scale_y_continuous(limits = c(0, 2000000)) + labs(title = "Notifications Time Series for Males 15plus yrs")

#females 15 plus plot 
females_15plus <- select(perc_world, c(g_whoregion, year, newrel_f15plus)) 
gg_females15plus <- ggplot(females_15plus, aes(x = year, y = newrel_f15plus, col = g_whoregion)) + geom_line() + geom_point(x = 2020, y = 426790, col = "red") + geom_point(x = 2020, y = 77417, col = "brown") + geom_point(x = 2020, y = 201386, col = "green") + geom_point(x = 2020, y = 66222.5, col = "turquoise2") + geom_point(x = 2020, y = 1182645, col = "blue") + geom_point(x = 2020, y = 435651, col = "pink") + scale_y_continuous(limits = c(0, 1200000)) + labs(title = "Notifications Time Series for Females 15plus yrs")

Creating notification graphs for entire world

#Putting together notification data for years 2013 to 2020
world_data <- world_2013[,-c(1:3)] %>% group_by(year) %>% na.omit()
tot_m04 <- summarise(world_data, total = sum(newrel_m04))
tot_m04 %<>% as.data.frame()
colnames(tot_m04) <- c("year", "m04")

tot_f04 <- summarise(world_data, total = sum(newrel_f04))
tot_f04 %<>% as.data.frame()
colnames(tot_f04) <- c("year", "f04")

tot_m514 <- summarise(world_data, total = sum(newrel_m514))
tot_m514 %<>% as.data.frame()
colnames(tot_m514) <- c("year", "m514")

tot_f514 <- summarise(world_data, total = sum(newrel_f514))
tot_f514 %<>% as.data.frame()
colnames(tot_f514) <- c("year", "f514")

tot_m15plus <- summarise(world_data, total = sum(newrel_m15plus))
tot_m15plus %<>% as.data.frame()
colnames(tot_m15plus) <- c("year", "m15plus")

tot_f15plus <- summarise(world_data, total = sum(newrel_f15plus))
tot_f15plus %<>% as.data.frame()
colnames(tot_f15plus) <- c("year", "f15plus")

all_tots <- cbind(tot_m04, tot_f04$f04, tot_m514$m514, tot_f514$f514, tot_m15plus$m15plus, tot_f15plus$f15plus)
colnames(all_tots) <- c("year", "case_m04", "case_f04", "case_m514", "case_f514", "case_m15plus", "case_f15plus")

all_tots <- mutate(all_tots, "all04" = case_m04 + case_f04, "all514" = case_m514 + case_f514, "all15plus" = case_m15plus + case_f15plus, "all_male" = case_m04 + case_m514 + case_m15plus, "all_female" = case_f04 + case_f514 + case_f15plus, "all_cases" = all_male + all_female)

all_copy <- all_tots
all_copy04 <- all_copy[, c(1:3)] 
colnames(all_copy04) <- c("year", "male", "female")
all_copy04 <- pivot_longer(all_copy04, cols = c(male, female), names_to = "sex", values_to = "cases")

all_copy514 <- all_copy[, c(1,4,5)] 
colnames(all_copy514) <- c("year", "male", "female")
all_copy514 <- pivot_longer(all_copy514, cols = c(male, female), names_to = "sex", values_to = "cases")

all_copy15plus <- all_copy[, c(1,6,7)] 
colnames(all_copy15plus) <- c("year", "male", "female")
all_copy15plus <- pivot_longer(all_copy15plus, cols = c(male, female), names_to = "sex", values_to = "cases")

all_copy15plus <- all_copy[, c(1,6,7)] 
colnames(all_copy15plus) <- c("year", "male", "female")
all_copy15plus <- pivot_longer(all_copy15plus, cols = c(male, female), names_to = "sex", values_to = "cases")

###Drawing the plots 
world_04 <- ggplot(all_copy04, aes(x = year, y = cases, fill = sex)) + geom_bar(stat = "identity", position = "dodge") + labs(title = "Number of Reported Cases Amongst 0-4 yrs from 2013 to 2020")

world_514 <- ggplot(all_copy514, aes(x = year, y = cases, fill = sex)) + geom_bar(stat = "identity", position = "dodge") + labs(title = "Number of Reported Cases Amongst 5-14 yrs from 2013 to 2020")

world_15plus <- ggplot(all_copy15plus, aes(x = year, y = cases, fill = sex)) + geom_bar(stat = "identity", position = "dodge") + labs(title = "Number of Reported Cases Amongst 15plus yrs from 2013 to 2020")

Repeating the continental difference between actual and predicted and including column for overall

LS0tCnRpdGxlOiAiQWxsIENvdW50cmllcyBSZWdpb25hbCBEYXRhIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpBSU06IENyZWF0ZSByZWdpb24gYnkgcmVnaW9uIGFuYWx5c2lzIG9mIG1hbGUgdnMgZmVtYWxlIGZvciBlYWNoIGFnZSBncm91cHMgKDAtNCwgNS0xNCwgMC0xNCBhbmQgMTUgcGx1cykgZm9yIGFsbCBjb3VudHJpZXMgc2VwYXJhdGVkIGJ5IHJlZ2lvbgoKYGBge3J9CnNldHdkKCJ+L0Rlc2t0b3AvQUZQL21vZFYzL2RhdGEiKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh0aWR5cikKbGlicmFyeShmb3JlY2FzdCkKbGlicmFyeShmcHAyKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZ2dwbG90MikKCndvcmxkIDwtIHJlYWRfY3N2KCJUQl9ub3RpZmljYXRpb25zLmNzdiIpCnRpZHl3b3JsZCA8LSB3b3JsZFssIGMoMSwzLDUsNiwxMDAsMTAzLDEwNCwxMTMsMTE1LDExOCwxMTksMTI4KV0Kd29ybGRfMjAxMyA8LSB0aWR5d29ybGQgJT4lIGZpbHRlcih5ZWFyID4gMjAxMikKYGBgCgpPcmdhbmlzaW5nIHRoZSBkYXRhIGJ5IGdfd2hvcmVnaW9uCgpgYGB7cn0KZ3JvdXBlZF8yMDEzIDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxMykgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDEzKQoKZ3JvdXBlZF8yMDE0IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxNCkgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE0KQoKZ3JvdXBlZF8yMDE1IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxNSkgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE1KQoKZ3JvdXBlZF8yMDE2IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxNikgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE2KQoKZ3JvdXBlZF8yMDE3IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxNykgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE3KQoKZ3JvdXBlZF8yMDE4IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxOCkgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE4KQoKZ3JvdXBlZF8yMDE5IDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAxOSkgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDE5KQoKZ3JvdXBlZF8yMDIwIDwtIGdyb3VwX2J5KHdvcmxkXzIwMTMsIGdfd2hvcmVnaW9uKSAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIHN1bW1hcmlzZShuZXdyZWxfbTA0ID0gc3VtKG5hLm9taXQobmV3cmVsX20wNCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWxfZjA0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwNCkpLAogICAgICAgICAgICAgICAgIG5ld3JlbF9tNTE0ID0gc3VtKG5hLm9taXQobmV3cmVsX201MTQpKSwgbmV3cmVsX2Y1MTQgPSBzdW0obmEub21pdChuZXdyZWxfZjUxNCkpLCAKICAgICAgICAgICAgICAgICBuZXdyZWxfbTAxNCA9IHN1bShuYS5vbWl0KG5ld3JlbF9tMDE0KSksIG5ld3JlbF9mMDE0ID0gc3VtKG5hLm9taXQobmV3cmVsX2YwMTQpKSwgCiAgICAgICAgICAgICAgICAgbmV3cmVsX20xNXBsdXMgPSBzdW0obmEub21pdChuZXdyZWxfbTE1cGx1cykpLCBuZXdyZWxfZjE1cGx1cyA9IHN1bShuYS5vbWl0KG5ld3JlbF9mMTVwbHVzKSkpICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIGNiaW5kKHllYXIgPSAyMDIwKQoKYmluZF93b3JsZCA8LSByYmluZChncm91cGVkXzIwMTMsIGdyb3VwZWRfMjAxNCwgZ3JvdXBlZF8yMDE1LCBncm91cGVkXzIwMTYsIGdyb3VwZWRfMjAxNywgZ3JvdXBlZF8yMDE4LCBncm91cGVkXzIwMTksIGdyb3VwZWRfMjAyMCkKCmJpbmRfd29ybGQgPC0gYmluZF93b3JsZFssIGMoMSwgMTAsIDI6OSldCgphcnJhbmdlX3dvcmxkIDwtIGFycmFuZ2UoYmluZF93b3JsZCwgZ193aG9yZWdpb24pCgojI0luY2x1ZGluZyBjb2x1bW5zIGZvciB0b3RhbCB2YWx1ZXMgCgptdXRhdGVfd29ybGQgPC0gbXV0YXRlKGFycmFuZ2Vfd29ybGQsICJuZXdyZWxfdG90MDQiID0gbmV3cmVsX20wNCArIG5ld3JlbF9mMDQsICJuZXdyZWxfdG90NTE0IiA9IG5ld3JlbF9tNTE0ICsgbmV3cmVsX2Y1MTQsICJuZXdyZWxfdG90MDE0IiA9IG5ld3JlbF9tMDE0ICsgbmV3cmVsX2YwMTQsICJuZXdyZWxfdG90MTVwbHVzIiA9IG5ld3JlbF9tMTVwbHVzICsgbmV3cmVsX2YxNXBsdXMpCgpwZXJjX3dvcmxkIDwtIG11dGF0ZShtdXRhdGVfd29ybGQsICJwZXJjXzAxNCIgPSAxMDAgKiAobmV3cmVsX3RvdDAxNC8obmV3cmVsX3RvdDAxNCArIG5ld3JlbF90b3QxNXBsdXMpKSwgInBlcmNfeW91bmdraWRzIiA9IDEwMCAqIChuZXdyZWxfdG90MDQvbmV3cmVsX3RvdDAxNCkpCgoKCmBgYAoKQ3JlYXRpbmcgZ3JhcGhzIGZvciBtYWxlIHZzIGZlbWFsZSBmb3IgMC00IGJ5IGdfd2hvcmVnaW9uCgpgYGB7cn0KYWZyXzA0IDwtIHBlcmNfd29ybGQgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiQUZSIikgJT4lIHNlbGVjdChuZXdyZWxfbTA0LCBuZXdyZWxfZjA0KSAlPiUgCiAgdCgpCmNvbG5hbWVzKGFmcl8wNCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKYWZyXzA0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDMwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAwLTQgeWVhcnMgaW4gQUZSIikKCmFtcl8wNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkFNUiIpICU+JSBzZWxlY3QobmV3cmVsX20wNCwgbmV3cmVsX2YwNCkgJT4lIAogIHQoKQpjb2xuYW1lcyhhbXJfMDQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmFtcl8wNCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwzMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAwLTQgeWVhcnMgaW4gQU1SIikKCmVtcl8wNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkVNUiIpICU+JSBzZWxlY3QobmV3cmVsX20wNCwgbmV3cmVsX2YwNCkgJT4lIAogIHQoKQpjb2xuYW1lcyhlbXJfMDQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmVtcl8wNCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwyMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMC00IHllYXJzIGluIEVNUiIpCgpldXJfMDQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJFVVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMDQsIG5ld3JlbF9mMDQpICU+JSAKICB0KCkKY29sbmFtZXMoZXVyXzA0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQpldXJfMDQgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsMzAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMC00IHllYXJzIGluIEVVUiIpCgpzZWFfMDQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJTRUEiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMDQsIG5ld3JlbF9mMDQpICU+JSAKICB0KCkgCmNvbG5hbWVzKHNlYV8wNCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKc2VhXzA0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDYwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAwLTQgeWVhcnMgaW4gU0VBIikKCndwcl8wNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIldQUiIpICU+JSBzZWxlY3QobmV3cmVsX20wNCwgbmV3cmVsX2YwNCkgJT4lIAogIHQoKQpjb2xuYW1lcyh3cHJfMDQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCndwcl8wNCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwyMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMC00IHllYXJzIGluIFdQUiIpCgoKYGBgCkNyZWF0aW5nIGdyYXBocyBmb3Igbm90aWZpY2F0aW9ucyBpbiA1LTE0IHllYXJzIGJ5IGdfd2hvcmVnaW9uCgpgYGB7cn0KYWZyXzUxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkFGUiIpICU+JSBzZWxlY3QobmV3cmVsX201MTQsIG5ld3JlbF9mNTE0KSAlPiUgCiAgdCgpIApjb2xuYW1lcyhhZnJfNTE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQphZnJfNTE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDQwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAwLTUxNCB5ZWFycyBpbiBBRlIiKQoKYW1yXzUxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkFNUiIpICU+JSBzZWxlY3QobmV3cmVsX201MTQsIG5ld3JlbF9mNTE0KSAlPiUgCiAgdCgpIApjb2xuYW1lcyhhZnJfNTE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQphbXJfNTE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDQwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhZ2VzIDUtMTQgeWVhcnMgaW4gQU1SIikKCmVtcl81MTQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJFTVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tNTE0LCBuZXdyZWxfZjUxNCkgJT4lIAogIHQoKSAKY29sbmFtZXMoZW1yXzUxNCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKZW1yXzUxNCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwzMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgNS0xNCB5ZWFycyBpbiBFTVIiKQoKZXVyXzUxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkVVUiIpICU+JSBzZWxlY3QobmV3cmVsX201MTQsIG5ld3JlbF9mNTE0KSAlPiUgCiAgdCgpCmNvbG5hbWVzKGV1cl81MTQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmV1cl81MTQgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsNTAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgNS0xNCB5ZWFycyBpbiBFVVIiKQoKc2VhXzUxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIlNFQSIpICU+JSBzZWxlY3QobmV3cmVsX201MTQsIG5ld3JlbF9mNTE0KSAlPiUgCiAgdCgpIApjb2xuYW1lcyhzZWFfNTE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQpzZWFfNTE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDEwMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgNS0xNCB5ZWFycyBpbiBTRUEiKQoKd3ByXzUxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIldQUiIpICU+JSBzZWxlY3QobmV3cmVsX201MTQsIG5ld3JlbF9mNTE0KSAlPiUgCiAgdCgpCmNvbG5hbWVzKHdwcl81MTQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCndwcl81MTQgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsMzAwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhZ2VzIDUtMTQgeWVhcnMgaW4gV1BSIikKYGBgCkNyZWF0aW5nIHBsb3QgZm9yIDAtMTQgCgpgYGB7cn0KYWZyXzAxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkFGUiIpICU+JSBzZWxlY3QobmV3cmVsX20wMTQsIG5ld3JlbF9mMDE0KSAlPiUgCiAgdCgpCmNvbG5hbWVzKGFmcl8wMTQpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmFmcl8wMTQgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsNzAwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhZ2VzIDAtMTQgeWVhcnMgaW4gQUZSIikKCmFtcl8wMTQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJBTVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMDE0LCBuZXdyZWxfZjAxNCkgJT4lIAogIHQoKQpjb2xuYW1lcyhhbXJfMDE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQphbXJfMDE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDYwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhZ2VzIDAtMTQgeWVhcnMgaW4gQU1SIikKCmVtcl8wMTQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJFTVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMDE0LCBuZXdyZWxfZjAxNCkgJT4lIAogIHQoKSAKY29sbmFtZXMoZW1yXzAxNCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKZW1yXzAxNCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCw1MDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMC0xNCB5ZWFycyBpbiBFTVIiKQoKZXVyXzAxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkVVUiIpICU+JSBzZWxlY3QobmV3cmVsX20wMTQsIG5ld3JlbF9mMDE0KSAlPiUgCiAgdCgpIApjb2xuYW1lcyhldXJfMDE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQpldXJfMDE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDgwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhZ2VzIDAtMTQgeWVhcnMgaW4gRVVSIikKCnNlYV8wMTQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJTRUEiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMDE0LCBuZXdyZWxfZjAxNCkgJT4lIAogIHQoKQpjb2xuYW1lcyhzZWFfMDE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQpzZWFfMDE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDE1MDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMC0xNCB5ZWFycyBpbiBTRUEiKQoKd3ByXzAxNCA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIldQUiIpICU+JSBzZWxlY3QobmV3cmVsX20wMTQsIG5ld3JlbF9mMDE0KSAlPiUgCiAgdCgpIApjb2xuYW1lcyh3cHJfMDE0KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQp3cHJfMDE0ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDUwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAwLTE0IHllYXJzIGluIFdQUiIpCmBgYApDcmVhdGluZyBwbG90IGZvciAxNSBwbHVzIAoKYGBge3J9CmFmcl8xNXBsdXMgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJBRlIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMTVwbHVzLCBuZXdyZWxfZjE1cGx1cykgJT4lIAogIHQoKSAKY29sbmFtZXMoYWZyXzE1cGx1cykgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKYWZyXzE1cGx1cyAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwxMDAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAxNXBsdXMgeWVhcnMgaW4gQUZSIikKCmFtcl8xNXBsdXMgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJBTVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMTVwbHVzLCBuZXdyZWxfZjE1cGx1cykgJT4lIAogIHQoKQpjb2xuYW1lcyhhbXJfMTVwbHVzKSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQphbXJfMTVwbHVzICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDMwMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMTUgcGx1cyB5ZWFycyBpbiBBTVIiKQoKZW1yXzE1cGx1cyA8LSBwZXJjX3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkVNUiIpICU+JSBzZWxlY3QobmV3cmVsX20xNXBsdXMsIG5ld3JlbF9mMTVwbHVzKSAlPiUgCiAgdCgpIApjb2xuYW1lcyhlbXJfMTVwbHVzKSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQplbXJfMTVwbHVzICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDUwMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFnZXMgMTVwbHVzIHllYXJzIGluIEVNUiIpCgpldXJfMTVwbHVzIDwtIHBlcmNfd29ybGQgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiRVVSIikgJT4lIHNlbGVjdChuZXdyZWxfbTE1cGx1cywgbmV3cmVsX2YxNXBsdXMpICU+JSAKICB0KCkgCmNvbG5hbWVzKGV1cl8xNXBsdXMpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmV1cl8xNXBsdXMgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsMjAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAxNXBsdXMgeWVhcnMgaW4gRVVSIikKCnNlYV8xNXBsdXMgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJTRUEiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMTVwbHVzLCBuZXdyZWxfZjE1cGx1cykgJT4lIAogIHQoKSAKY29sbmFtZXMoc2VhXzE1cGx1cykgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKc2VhXzE1cGx1cyAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwyMDAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAxNXBsdXMgeWVhcnMgaW4gU0VBIikKCndwcl8xNXBsdXMgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJXUFIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tMTVwbHVzLCBuZXdyZWxfZjE1cGx1cykgJT4lIAogIHQoKSAKY29sbmFtZXMod3ByXzE1cGx1cykgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKd3ByXzE1cGx1cyAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwxMDAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWdlcyAxNXBsdXMgeWVhcnMgaW4gV1BSIikKYGBgClBsb3R0aW5nIHRvdGFsIG5vdGlmaWNhdGlvbnMgb3ZlciB0aW1lIAoKYGBge3J9CnRvdF93b3JsZCA8LSBtdXRhdGUocGVyY193b3JsZCwgIm5ld3JlbF9tdG90IiA9IG5ld3JlbF9tMDE0ICsgbmV3cmVsX20xNXBsdXMsICJuZXdyZWxfZnRvdCIgPSBuZXdyZWxfZjAxNCArIG5ld3JlbF9mMTVwbHVzLCAiVE9UIiA9IG5ld3JlbF9tdG90ICsgbmV3cmVsX2Z0b3QpCgphZnJfdG90IDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJBRlIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tdG90LCBuZXdyZWxfZnRvdCkgJT4lIAogIHQoKSAKY29sbmFtZXMoYWZyX3RvdCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKYWZyX3RvdCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwxMDAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWxsIGFnZXMgeWVhcnMgaW4gQUZSIikKCmFtcl90b3QgPC0gdG90X3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkFNUiIpICU+JSBzZWxlY3QobmV3cmVsX210b3QsIG5ld3JlbF9mdG90KSAlPiUgCiAgdCgpCmNvbG5hbWVzKGFtcl90b3QpIDwtIGMoIjIwMTMiLCAiMjAxNCIsICIyMDE1IiwgIjIwMTYiLCAiMjAxNyIsICIyMDE4IiwgIjIwMTkiLCAiMjAyMCIpCmFtcl90b3QgJTw+JSBiYXJwbG90KGNvbCA9IGMoInNreWJsdWUiLCAic2VhZ3JlZW4xIiksIGJlc2lkZSA9IFRSVUUsIHlsaW0gPSBjKDAsMjAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWxsIGFnZXMgeWVhcnMgaW4gQU1SIikKCmVtcl90b3QgPC0gdG90X3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIkVNUiIpICU+JSBzZWxlY3QobmV3cmVsX210b3QsIG5ld3JlbF9mdG90KSAlPiUgCiAgdCgpIApjb2xuYW1lcyhlbXJfdG90KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQplbXJfdG90ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDUwMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFsbCBhZ2VzIHllYXJzIGluIEVNUiIpCgpldXJfdG90IDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJFVVIiKSAlPiUgc2VsZWN0KG5ld3JlbF9tdG90LCBuZXdyZWxfZnRvdCkgJT4lIAogIHQoKQpjb2xuYW1lcyhldXJfdG90KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQpldXJfdG90ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDIwMDAwMCksIHhsYWIgPSAieWVhciIsIHlsYWIgPSAibm90aWZpY2F0aW9ucyIpICsgdGl0bGUoIlNleCBkaXNhZ2dyZWdhdGVkIG5vdGlmaWNhdGlvbnMgZm9yIGFsbCBhZ2VzIHllYXJzIGluIEVVUiIpCgpzZWFfdG90IDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJTRUEiKSAlPiUgc2VsZWN0KG5ld3JlbF9tdG90LCBuZXdyZWxfZnRvdCkgJT4lIAogIHQoKSAKY29sbmFtZXMoc2VhX3RvdCkgPC0gYygiMjAxMyIsICIyMDE0IiwgIjIwMTUiLCAiMjAxNiIsICIyMDE3IiwgIjIwMTgiLCAiMjAxOSIsICIyMDIwIikKc2VhX3RvdCAlPD4lIGJhcnBsb3QoY29sID0gYygic2t5Ymx1ZSIsICJzZWFncmVlbjEiKSwgYmVzaWRlID0gVFJVRSwgeWxpbSA9IGMoMCwzMDAwMDAwKSwgeGxhYiA9ICJ5ZWFyIiwgeWxhYiA9ICJub3RpZmljYXRpb25zIikgKyB0aXRsZSgiU2V4IGRpc2FnZ3JlZ2F0ZWQgbm90aWZpY2F0aW9ucyBmb3IgYWxsIGFnZXMgeWVhcnMgaW4gU0VBIikKCndwcl90b3QgPC0gdG90X3dvcmxkICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIldQUiIpICU+JSBzZWxlY3QobmV3cmVsX210b3QsIG5ld3JlbF9mdG90KSAlPiUgCiAgdCgpIApjb2xuYW1lcyh3cHJfdG90KSA8LSBjKCIyMDEzIiwgIjIwMTQiLCAiMjAxNSIsICIyMDE2IiwgIjIwMTciLCAiMjAxOCIsICIyMDE5IiwgIjIwMjAiKQp3cHJfdG90ICU8PiUgYmFycGxvdChjb2wgPSBjKCJza3libHVlIiwgInNlYWdyZWVuMSIpLCBiZXNpZGUgPSBUUlVFLCB5bGltID0gYygwLDE1MDAwMDApLCB4bGFiID0gInllYXIiLCB5bGFiID0gIm5vdGlmaWNhdGlvbnMiKSArIHRpdGxlKCJTZXggZGlzYWdncmVnYXRlZCBub3RpZmljYXRpb25zIGZvciBhbGwgYWdlcyB5ZWFycyBpbiBXUFIiKQoKYGBgCmBgYHtyfQojI0F0dGVtcHQgYXQgY3JlYXRpbmcgYSBmb3JlY2FzdCAKCmZpbHRfYWZyMDQgPC0gcGVyY193b3JsZCAlPiUgZmlsdGVyKGdfd2hvcmVnaW9uID09ICJBRlIiKSAlPiUgZmlsdGVyKHllYXIgIT0gMjAyMCkKCnRzX2FmcjA0IDwtIHRzKGZpbHRfYWZyMDRbLCBjKDMpXSwgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQoKYXJpbWFfYWZyMDQgPC0gYXV0by5hcmltYSh0c19hZnIwNCwgZD0xLCBEPTEsIHN0ZXB3aXNlID0gRkFMU0UsIGFwcHJveGltYXRpb24gPSBGQUxTRSwgdHJhY2UgPSBUUlVFKQpwcmludChzdW1tYXJ5KGFyaW1hX2FmcjA0KSkKY2hlY2tyZXNpZHVhbHMoYXJpbWFfYWZyMDQpCgpmY3N0X2Fmcm0wNCA8LSBmb3JlY2FzdChhcmltYV9hZnIwNCwgaCA9IDEpCmF1dG9wbG90KGZjc3QpCnN1bV9hZnJtMDQgPC0gcHJpbnQoc3VtbWFyeShmY3N0KSkKCiMjIyNBdHRlbXB0IGF0IGNyZWF0aW5nIGZ1bmN0aW9uIHRvIHByb2R1Y2UgcHJlZGljdGlvbnMgCgpvdXRfMjAyMCA8LSBmdW5jdGlvbihkZiA9IHRvdF93b3JsZCwgcmVnaW9uKXsKICAgICAgICBkZiAlPiUgZmlsdGVyKHllYXIgIT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSByZWdpb24pICU+JSByZXR1cm4oKSB9CgphcmltYV9UQiA8LSBmdW5jdGlvbihkZiA9IHRvdF93b3JsZCwgZ3JvdXApIHsKICAgICAgICBkYXRhMSA8LSBkZiAlPiUgc2VsZWN0KGdyb3VwKSAlPiUgdHMoc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKSAlPiUgYXV0by5hcmltYShkPTEsIEQ9MSwgc3RlcHdpc2UgPSBGQUxTRSwgYXBwcm94aW1hdGlvbiA9IEZBTFNFLCB0cmFjZSA9IFRSVUUpIAogICAgICAgIHByaW50KHN1bW1hcnkoZGF0YTEpKQogICAgICAgIEZDU1QgPC0gZm9yZWNhc3QoZGF0YTEsIGggPSAxKQogICAgICAgIGF1dG9wbG90KEZDU1QpCiAgICAgICAgcHJpbnQoc3VtbWFyeShGQ1NUKSl9CgojI0FGUklDQSBFU1RJTUFURVMgCgphZnJfbTA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFGUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20wNCIpIApyb3duYW1lcyhhZnJfbTA0KSA8LSAiYWZyX20wNCIKCmFmcl9mMDQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiQUZSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjA0IikKcm93bmFtZXMoYWZyX2YwNCkgPC0gImFmcl9mMDQiCgphZnJfbTUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJBRlIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tNTE0IikKcm93bmFtZXMoYWZyX201MTQpIDwtICJhZnJfbTUxNCIKCmFmcl9mNTE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFGUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2Y1MTQiKQpyb3duYW1lcyhhZnJfZjUxNCkgPC0gImFmcl9mNTE0IgoKYWZyX20wMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiQUZSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTAxNCIpCnJvd25hbWVzKGFmcl9tMDE0KSA8LSAiYWZyX20wMTQiCgphZnJfZjAxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJBRlIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mMDE0IikKcm93bmFtZXMoYWZyX2YwMTQpIDwtICJhZnJfZjAxNCIKCmFmcl9tMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFGUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20xNXBsdXMiKQpyb3duYW1lcyhhZnJfbTE1cGx1cykgPC0gImFmcl9tMTVwbHVzIgoKYWZyX2YxNXBsdXMgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiQUZSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjE1cGx1cyIpCnJvd25hbWVzKGFmcl9mMTVwbHVzKSA8LSAiYWZyX2YxNXBsdXMiCgphZnJfZXN0aW1hdGVzIDwtIHJiaW5kKGFmcl9tMDQsIGFmcl9mMDQsIGFmcl9tNTE0LCBhZnJfZjUxNCwgYWZyX20wMTQsIGFmcl9mMDE0LCBhZnJfbTE1cGx1cywgYWZyX2YxNXBsdXMpCgoKI1NFQSBwcmVkaWN0aW9ucyAKc2VhX20wNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJTRUEiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMDQiKSAKcm93bmFtZXMoc2VhX20wNCkgPC0gInNlYV9tMDQiCgpzZWFfZjA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIlNFQSIpICU+JSBhcmltYV9UQigibmV3cmVsX2YwNCIpCnJvd25hbWVzKHNlYV9mMDQpIDwtICJzZWFfZjA0IgoKc2VhX201MTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiU0VBIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTUxNCIpCnJvd25hbWVzKHNlYV9tNTE0KSA8LSAic2VhX201MTQiCgpzZWFfZjUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJTRUEiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mNTE0IikKcm93bmFtZXMoc2VhX2Y1MTQpIDwtICJzZWFfZjUxNCIKCnNlYV9tMDE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIlNFQSIpICU+JSBhcmltYV9UQigibmV3cmVsX20wMTQiKQpyb3duYW1lcyhzZWFfbTAxNCkgPC0gInNlYV9tMDE0IgoKc2VhX2YwMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiU0VBIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjAxNCIpCnJvd25hbWVzKHNlYV9mMDE0KSA8LSAic2VhX2YwMTQiCgpzZWFfbTE1cGx1cyA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJTRUEiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMTVwbHVzIikKcm93bmFtZXMoc2VhX20xNXBsdXMpIDwtICJzZWFfbTE1cGx1cyIKCnNlYV9mMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIlNFQSIpICU+JSBhcmltYV9UQigibmV3cmVsX2YxNXBsdXMiKQpyb3duYW1lcyhzZWFfZjE1cGx1cykgPC0gInNlYV9mMTVwbHVzIgoKc2VhX2VzdGltYXRlcyA8LSByYmluZChzZWFfbTA0LCBzZWFfZjA0LCBzZWFfbTUxNCwgc2VhX2Y1MTQsIHNlYV9tMDE0LCBzZWFfZjAxNCwgc2VhX20xNXBsdXMsIHNlYV9mMTVwbHVzKQoKI1dQUiBlc3RpbWF0ZXMgCgp3cHJfbTA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20wNCIpIApyb3duYW1lcyh3cHJfbTA0KSA8LSAid3ByX20wNCIKCndwcl9mMDQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjA0IikKcm93bmFtZXMod3ByX2YwNCkgPC0gIndwcl9mMDQiCgp3cHJfbTUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJXUFIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tNTE0IikKcm93bmFtZXMod3ByX201MTQpIDwtICJ3cHJfbTUxNCIKCndwcl9mNTE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2Y1MTQiKQpyb3duYW1lcyh3cHJfZjUxNCkgPC0gIndwcl9mNTE0IgoKd3ByX20wMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTAxNCIpCnJvd25hbWVzKHdwcl9tMDE0KSA8LSAid3ByX20wMTQiCgp3cHJfZjAxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJXUFIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mMDE0IikKcm93bmFtZXMod3ByX2YwMTQpIDwtICJ3cHJfZjAxNCIKCndwcl9tMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20xNXBsdXMiKQpyb3duYW1lcyh3cHJfbTE1cGx1cykgPC0gIndwcl9tMTVwbHVzIgoKd3ByX2YxNXBsdXMgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjE1cGx1cyIpCnJvd25hbWVzKHdwcl9mMTVwbHVzKSA8LSAid3ByX2YxNXBsdXMiCgp3cHJfZXN0aW1hdGVzIDwtIHJiaW5kKHdwcl9tMDQsIHdwcl9mMDQsIHdwcl9tNTE0LCB3cHJfZjUxNCwgd3ByX20wMTQsIHdwcl9mMDE0LCB3cHJfbTE1cGx1cywgd3ByX2YxNXBsdXMpCgojRVVSIEVzdGltYXRlcwoKZXVyX20wNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFVVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMDQiKSAKcm93bmFtZXMoZXVyX20wNCkgPC0gImV1cl9tMDQiCgpldXJfZjA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkVVUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2YwNCIpCnJvd25hbWVzKGV1cl9mMDQpIDwtICJldXJfZjA0IgoKZXVyX201MTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiRVVSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTUxNCIpCnJvd25hbWVzKGV1cl9tNTE0KSA8LSAiZXVyX201MTQiCgpldXJfZjUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFVVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mNTE0IikKcm93bmFtZXMoZXVyX2Y1MTQpIDwtICJldXJfZjUxNCIKCmV1cl9tMDE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkVVUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20wMTQiKQpyb3duYW1lcyhldXJfbTAxNCkgPC0gImV1cl9tMDE0IgoKZXVyX2YwMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiRVVSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjAxNCIpCnJvd25hbWVzKGV1cl9mMDE0KSA8LSAiZXVyX2YwMTQiCgpldXJfbTE1cGx1cyA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFVVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMTVwbHVzIikKcm93bmFtZXMoZXVyX20xNXBsdXMpIDwtICJldXJfbTE1cGx1cyIKCmV1cl9mMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkVVUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2YxNXBsdXMiKQpyb3duYW1lcyhldXJfZjE1cGx1cykgPC0gImV1cl9mMTVwbHVzIgoKZXVyX2VzdGltYXRlcyA8LSByYmluZChldXJfbTA0LCBldXJfZjA0LCBldXJfbTUxNCwgZXVyX2Y1MTQsIGV1cl9tMDE0LCBldXJfZjAxNCwgZXVyX20xNXBsdXMsIGV1cl9mMTVwbHVzKQoKI0FNUiBFc3RpbWF0ZXMKCmVtcl9tMDQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiRU1SIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTA0IikgCnJvd25hbWVzKGVtcl9tMDQpIDwtICJlbXJfbTA0IgoKZW1yX2YwNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mMDQiKQpyb3duYW1lcyhlbXJfZjA0KSA8LSAiZW1yX2YwNCIKCmVtcl9tNTE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkVNUiIpICU+JSBhcmltYV9UQigibmV3cmVsX201MTQiKQpyb3duYW1lcyhlbXJfbTUxNCkgPC0gImVtcl9tNTE0IgoKZW1yX2Y1MTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiRU1SIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjUxNCIpCnJvd25hbWVzKGVtcl9mNTE0KSA8LSAiZW1yX2Y1MTQiCgplbXJfbTAxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMDE0IikKcm93bmFtZXMoZW1yX20wMTQpIDwtICJlbXJfbTAxNCIKCmVtcl9mMDE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkVNUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2YwMTQiKQpyb3duYW1lcyhlbXJfZjAxNCkgPC0gImVtcl9mMDE0IgoKZW1yX20xNXBsdXMgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiRU1SIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTE1cGx1cyIpCnJvd25hbWVzKGVtcl9tMTVwbHVzKSA8LSAiZW1yX20xNXBsdXMiCgplbXJfZjE1cGx1cyA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJFTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mMTVwbHVzIikKcm93bmFtZXMoZW1yX2YxNXBsdXMpIDwtICJlbXJfZjE1cGx1cyIKCmVtcl9lc3RpbWF0ZXMgPC0gcmJpbmQoZW1yX20wNCwgZW1yX2YwNCwgZW1yX201MTQsIGVtcl9mNTE0LCBlbXJfbTAxNCwgZW1yX2YwMTQsIGVtcl9tMTVwbHVzLCBlbXJfZjE1cGx1cykKCiNXUFIgRXN0aW1hdGVzCgp3cHJfbTA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20wNCIpIApyb3duYW1lcyh3cHJfbTA0KSA8LSAid3ByX20wNCIKCndwcl9mMDQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjA0IikKcm93bmFtZXMod3ByX2YwNCkgPC0gIndwcl9mMDQiCgp3cHJfbTUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJXUFIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tNTE0IikKcm93bmFtZXMod3ByX201MTQpIDwtICJ3cHJfbTUxNCIKCndwcl9mNTE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2Y1MTQiKQpyb3duYW1lcyh3cHJfZjUxNCkgPC0gIndwcl9mNTE0IgoKd3ByX20wMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTAxNCIpCnJvd25hbWVzKHdwcl9tMDE0KSA8LSAid3ByX20wMTQiCgp3cHJfZjAxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJXUFIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mMDE0IikKcm93bmFtZXMod3ByX2YwMTQpIDwtICJ3cHJfZjAxNCIKCndwcl9tMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIldQUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20xNXBsdXMiKQpyb3duYW1lcyh3cHJfbTE1cGx1cykgPC0gIndwcl9tMTVwbHVzIgoKd3ByX2YxNXBsdXMgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiV1BSIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjE1cGx1cyIpCnJvd25hbWVzKHdwcl9mMTVwbHVzKSA8LSAid3ByX2YxNXBsdXMiCgp3cHJfZXN0aW1hdGVzIDwtIHJiaW5kKHdwcl9tMDQsIHdwcl9mMDQsIHdwcl9tNTE0LCB3cHJfZjUxNCwgd3ByX20wMTQsIHdwcl9mMDE0LCB3cHJfbTE1cGx1cywgd3ByX2YxNXBsdXMpCgojQU1SIEVzdGltYXRlcwoKYW1yX20wNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJBTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMDQiKSAKcm93bmFtZXMoYW1yX20wNCkgPC0gImFtcl9tMDQiCgphbXJfZjA0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFNUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2YwNCIpCnJvd25hbWVzKGFtcl9mMDQpIDwtICJhbXJfZjA0IgoKYW1yX201MTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiQU1SIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfbTUxNCIpCnJvd25hbWVzKGFtcl9tNTE0KSA8LSAiYW1yX201MTQiCgphbXJfZjUxNCA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJBTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9mNTE0IikKcm93bmFtZXMoYW1yX2Y1MTQpIDwtICJhbXJfZjUxNCIKCmFtcl9tMDE0IDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFNUiIpICU+JSBhcmltYV9UQigibmV3cmVsX20wMTQiKQpyb3duYW1lcyhhbXJfbTAxNCkgPC0gImFtcl9tMDE0IgoKYW1yX2YwMTQgPC0gb3V0XzIwMjAodG90X3dvcmxkLCAiQU1SIikgJT4lIGFyaW1hX1RCKCJuZXdyZWxfZjAxNCIpCnJvd25hbWVzKGFtcl9mMDE0KSA8LSAiYW1yX2YwMTQiCgphbXJfbTE1cGx1cyA8LSBvdXRfMjAyMCh0b3Rfd29ybGQsICJBTVIiKSAlPiUgYXJpbWFfVEIoIm5ld3JlbF9tMTVwbHVzIikKcm93bmFtZXMoYW1yX20xNXBsdXMpIDwtICJhbXJfbTE1cGx1cyIKCmFtcl9mMTVwbHVzIDwtIG91dF8yMDIwKHRvdF93b3JsZCwgIkFNUiIpICU+JSBhcmltYV9UQigibmV3cmVsX2YxNXBsdXMiKQpyb3duYW1lcyhhbXJfZjE1cGx1cykgPC0gImFtcl9mMTVwbHVzIgoKYW1yX2VzdGltYXRlcyA8LSByYmluZChhbXJfbTA0LCBhbXJfZjA0LCBhbXJfbTUxNCwgYW1yX2Y1MTQsIGFtcl9tMDE0LCBhbXJfZjAxNCwgYW1yX20xNXBsdXMsIGFtcl9mMTVwbHVzKQoKYGBgCkNvbWJpbmluZyB0aGUgZGF0YSBmb3IgMjAyMCB3aXRoIHRoZSBtb2RlbCBlc3RpbWF0ZXMgCgpgYGB7cn0KIyNBRlIgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMgCmFmcl8yMDIwIDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiQUZSIikgJT4lIHQoKSAKYWZyXzIwMjAgPC0gYXMuZGF0YS5mcmFtZShhZnJfMjAyMFtjKDM6MTApLCBdKQoKcm93bmFtZXMoYWZyXzIwMjApIDwtIGMoImFmcl9tMDQiLCAiYWZyX2YwNCIsICJhZnJfbTUxNCIsICJhZnJfZjUxNCIsICJhZnJfbTAxNCIsICJhZnJfZjAxNCIsICJhZnJfbTE1cGx1cyIsICJhZnJfZjE1cGx1cyIpCmNvbG5hbWVzKGFmcl8yMDIwKSA8LSAibm90aWZfMjAyMCIKCmVzdF9hZnJfMjAyMCA8LSBjYmluZChhZnJfMjAyMCwgYWZyX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X2Fmcl8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X2Fmcl8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3RfYWZyXzIwMjAkbm90aWZfMjAyMCkKCmRpZl9hZnIgPC0gbXV0YXRlKGVzdF9hZnJfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAiYWZyX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkKCiMjU0VBIGRpZmZlcmVuY2UgY2FsY3VsYXRpb25zIApzZWFfMjAyMCA8LSB0b3Rfd29ybGQgJT4lIGZpbHRlcih5ZWFyID09IDIwMjApICU+JSBmaWx0ZXIoZ193aG9yZWdpb24gPT0gIlNFQSIpICU+JSB0KCkgCnNlYV8yMDIwIDwtIGFzLmRhdGEuZnJhbWUoc2VhXzIwMjBbYygzOjEwKSwgXSkKCnJvd25hbWVzKHNlYV8yMDIwKSA8LSBjKCJzZWFfbTA0IiwgInNlYV9mMDQiLCAic2VhX201MTQiLCAic2VhX2Y1MTQiLCAic2VhX20wMTQiLCAic2VhX2YwMTQiLCAic2VhX20xNXBsdXMiLCAic2VhX2YxNXBsdXMiKQpjb2xuYW1lcyhzZWFfMjAyMCkgPC0gIm5vdGlmXzIwMjAiCmVzdF9zZWFfMjAyMCA8LSBjYmluZChzZWFfMjAyMCwgc2VhX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X3NlYV8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X3NlYV8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3Rfc2VhXzIwMjAkbm90aWZfMjAyMCkKCmRpZl9zZWEgPC0gbXV0YXRlKGVzdF9zZWFfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAic2VhX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkKCiNXUFIgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMgCndwcl8yMDIwIDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiV1BSIikgJT4lIHQoKSAKd3ByXzIwMjAgPC0gYXMuZGF0YS5mcmFtZSh3cHJfMjAyMFtjKDM6MTApLCBdKQoKcm93bmFtZXMod3ByXzIwMjApIDwtIGMoIndwcl9tMDQiLCAid3ByX2YwNCIsICJ3cHJfbTUxNCIsICJ3cHJfZjUxNCIsICJ3cHJfbTAxNCIsICJ3cHJfZjAxNCIsICJ3cHJfbTE1cGx1cyIsICJ3cHJfZjE1cGx1cyIpCmNvbG5hbWVzKHdwcl8yMDIwKSA8LSAid3ByXzIwMjAiCmVzdF93cHJfMjAyMCA8LSBjYmluZCh3cHJfMjAyMCwgd3ByX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X3dwcl8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X3dwcl8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3Rfd3ByXzIwMjAkbm90aWZfMjAyMCkKCmRpZl93cHIgPC0gbXV0YXRlKGVzdF93cHJfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAid3ByX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkKCiNFVVIgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMgCmV1cl8yMDIwIDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiRVVSIikgJT4lIHQoKSAKZXVyXzIwMjAgPC0gYXMuZGF0YS5mcmFtZShldXJfMjAyMFtjKDM6MTApLCBdKQoKcm93bmFtZXMoZXVyXzIwMjApIDwtIGMoImV1cl9tMDQiLCAiZXVyX2YwNCIsICJldXJfbTUxNCIsICJldXJfZjUxNCIsICJldXJfbTAxNCIsICJldXJfZjAxNCIsICJldXJfbTE1cGx1cyIsICJldXJfZjE1cGx1cyIpCmNvbG5hbWVzKGV1cl8yMDIwKSA8LSAiZXVyXzIwMjAiCmVzdF9ldXJfMjAyMCA8LSBjYmluZChldXJfMjAyMCwgZXVyX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X2V1cl8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X2V1cl8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3RfZXVyXzIwMjAkbm90aWZfMjAyMCkKCmRpZl9ldXIgPC0gbXV0YXRlKGVzdF9ldXJfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAiZXVyX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkgCgojQU1SIGRpZmZlcmVuY2UgY2FsY3VsYXRpb25zCmFtcl8yMDIwIDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiQU1SIikgJT4lIHQoKSAKYW1yXzIwMjAgPC0gYXMuZGF0YS5mcmFtZShhbXJfMjAyMFtjKDM6MTApLCBdKQoKcm93bmFtZXMoYW1yXzIwMjApIDwtIGMoImFtcl9tMDQiLCAiYW1yX2YwNCIsICJhbXJfbTUxNCIsICJhbXJfZjUxNCIsICJhbXJfbTAxNCIsICJhbXJfZjAxNCIsICJhbXJfbTE1cGx1cyIsICJhbXJfZjE1cGx1cyIpCmNvbG5hbWVzKGV1cl8yMDIwKSA8LSAiYW1yXzIwMjAiCmVzdF9hbXJfMjAyMCA8LSBjYmluZChhbXJfMjAyMCwgYW1yX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X2Ftcl8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X2Ftcl8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3RfYW1yXzIwMjAkbm90aWZfMjAyMCkKCmRpZl9hbXIgPC0gbXV0YXRlKGVzdF9hbXJfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAiYW1yX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkgCgojRU1SIGRpZmZlcmVuY2UgY2FsY3VsYXRpb25zCmVtcl8yMDIwIDwtIHRvdF93b3JsZCAlPiUgZmlsdGVyKHllYXIgPT0gMjAyMCkgJT4lIGZpbHRlcihnX3dob3JlZ2lvbiA9PSAiRU1SIikgJT4lIHQoKSAKZW1yXzIwMjAgPC0gYXMuZGF0YS5mcmFtZShlbXJfMjAyMFtjKDM6MTApLCBdKQoKcm93bmFtZXMoZW1yXzIwMjApIDwtIGMoImVtcl9tMDQiLCAiZW1yX2YwNCIsICJlbXJfbTUxNCIsICJlbXJfZjUxNCIsICJlbXJfbTAxNCIsICJlbXJfZjAxNCIsICJlbXJfbTE1cGx1cyIsICJlbXJfZjE1cGx1cyIpCmNvbG5hbWVzKGVtcl8yMDIwKSA8LSAiZW1yXzIwMjAiCmVzdF9lbXJfMjAyMCA8LSBjYmluZChlbXJfMjAyMCwgZW1yX2VzdGltYXRlcykKY29sbmFtZXMoZXN0X2Vtcl8yMDIwKSA8LSBjKCJub3RpZl8yMDIwIiwgImVzdF8yMDIwIiwgIkxvXzgwIiwgIkhpXzgwIiwgIkxvXzk1IiwgIkhpXzk1IikKZXN0X2Vtcl8yMDIwJG5vdGlmXzIwMjAgPC0gYXMubnVtZXJpYyhlc3RfZW1yXzIwMjAkbm90aWZfMjAyMCkKCmRpZl9lbXIgPC0gbXV0YXRlKGVzdF9lbXJfMjAyMCwgIkRpZmZlcmVuY2UiID0gbm90aWZfMjAyMCAtIGVzdF8yMDIwLCAiZW1yX3BlcmMiID0gMTAwKihEaWZmZXJlbmNlL2VzdF8yMDIwKSkgCgojQ29tYmluZWQgZGF0YSBmcmFtZSB3aXRoIGRpZmZlcmVuY2UgZGF0YSAKY29tYmluZWRfZGlmIDwtIGRhdGEuZnJhbWUoZGlmX2FmclssIGMoNyw4KV0sIGRpZl9hbXJbLGMoNyw4KV0sIGRpZl9lbXJbLCBjKDcsOCldLCBkaWZfZXVyWyxjKDc6OCldLCBkaWZfc2VhWyxjKDc6OCldLCBkaWZfd3ByWyxjKDc6OCldKQpjb21iaW5lZF9kaWYkZ3JvdXAgPC0gYXMudmVjdG9yKHJvd25hbWVzKGNvbWJpbmVkX2RpZikpCmNvbWJpbmVkX2RpZiRncm91cCA8LSBjKCJtMDQiLCAiZjA0IiwgIm01MTQiLCAiZjUxNCIsICJtMDE0IiwgImYwMTQiLCAibTE1cGx1cyIsICJmMTVwbHVzIikKcm93bmFtZXMoY29tYmluZWRfZGlmKSA8LSBjKDE6OCkKY29tYmluZWRfZGlmIDwtIGNvbWJpbmVkX2RpZlssIGMoMTMsMToxMildCgpjb2xuYW1lcyhjb21iaW5lZF9kaWYpIDwtIGMoImdyb3VwIiwgIkFGUl9kaWYiLCAiQUZSX3BlcmMiLCAiQU1SX2RpZiIsICJBTVJfcGVyYyIsICJFTVJfZGlmIiwgIkVNUl9wZXJjIiwgIkVVUl9kaWYiLCAiRVVSX3BlcmMiLCAiU0VBX2RpZiIsICJTRUFfcGVyYyIsICJXUFJfZGlmIiwgIldQUl9wZXJjIikKCiNpc29sYXRpbmcgb25seSB0aGUgcGVyY2VudGFnZSBkYXRhIHRvIGJlIGFibGUgdG8gcGxvdCBhIGJhciBwbG90IApiYXJfZGF0YSA8LSBjb21iaW5lZF9kaWZbLCBjKDEsMyw1LDcsOSwxMSwxMyldCmJhcl9uZXdncm91cCA8LSBzdHJfc3BsaXRfZml4ZWQoYmFyX2RhdGEkZ3JvdXAsICIiLCAyKQpiYXJfZGF0YTIgPC0gY2JpbmQoYmFyX2RhdGEsIGJhcl9uZXdncm91cCkKY29sbmFtZXMoYmFyX2RhdGEyKSA8LSBjKCJncm91cCIsICJBRlIiLCAiQU1SIiwgIkVNUiIsICJFVVIiLCAiU0VBIiwgIldQUiIsICJzZXgiLCAiYWdlX2dyb3VwIikKYmFyX2RhdGEyIDwtIGJhcl9kYXRhMlssIGMoOSw4LDI6NyldCgoKcGl2X2RpZiA8LSBwaXZvdF9sb25nZXIoYmFyX2RhdGEyLCBjb2xzID0gYygiQUZSIiwgIkFNUiIsICJFTVIiLCAiRVVSIiwgIlNFQSIsICJXUFIiKSwgbmFtZXNfdG8gPSAiZ193aG9yZWdpb24iLCB2YWx1ZXNfdG8gPSAidmFsdWUiKQoKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpwaXZfdGhyZWUgPC0gZmlsdGVyKHBpdl9kaWYsIGFnZV9ncm91cCAhPSAiMDE0IikKCiMjQXR0ZW1wdCBhdCBkcmF3aW5nIHBsb3RzICBpbmNsdWRpbmcgMC0xNCAKYXJpbWFfZGlmIDwtIGdncGxvdChwaXZfZGlmLCBhZXMoeCA9IGdfd2hvcmVnaW9uLCB5ID0gdmFsdWUsIGZpbGwgPSBzZXgpKSArIGZhY2V0X3dyYXAofnBpdl9kaWYkYWdlX2dyb3VwKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpCgojI0F0dGVtcHQgZXhjbHVkaW5nIDAtMTQgCnBpdl9jb3B5IDwtIHBpdl90aHJlZQpwaXZfY29weSRhZ2VfZ3JvdXAgPC0gZmFjdG9yKHBpdl9jb3B5JGFnZV9ncm91cCwgbGV2ZWxzID0gYygiMDQiLCAiNTE0IiwgIjE1cGx1cyIpKQphcmltYV9jb3B5IDwtIGdncGxvdChwaXZfY29weSwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBmaWxsID0gc2V4KSkgKyBmYWNldF93cmFwKH5waXZfY29weSRhZ2VfZ3JvdXApICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikKYXJpbWFfY29weQoKYXJpbWFfdGhyZWUgPC0gZ2dwbG90KHBpdl90aHJlZSwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBmaWxsID0gc2V4KSkgKyBmYWNldF93cmFwKH5waXZfdGhyZWUkYWdlX2dyb3VwKSArIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9ICJkb2RnZSIpCmFyaW1hX3RocmVlCgpgYGAgCgoKCmBgYHtyfQojQXR0ZW1wdCBhdCB0aGUgZm9yZWNhc3RpbmcgbW9kZWxzIAojUmVhcnJhbmdpbmcgZGF0YSBmb3IgMC00IG1hbGVzIAoKbWFsZXNfMDQgPC0gc2VsZWN0KHBlcmNfd29ybGQsIGMoZ193aG9yZWdpb24sIHllYXIsIG5ld3JlbF9tMDQpKSAKcGl2X25hIDwtIHBpdm90X3dpZGVyKG1hbGVzXzA0LCBuYW1lc19mcm9tID0gInllYXIiLCB2YWx1ZXNfZnJvbSA9ICJuZXdyZWxfbTA0IikKcGl2X25hJGAyMDIwYCA8LSBOQQptYWxlc19iYWNrIDwtIHBpdm90X2xvbmdlcihwaXZfbmEsIGNvbHMgPSBjKGFzLnZlY3Rvcihjb2xuYW1lcyhwaXZfbmFbLDI6OV0pKSksIG5hbWVzX3RvID0gInllYXIiKQptYWxlc19iYWNrJHllYXIgPC0gYXMubnVtZXJpYyhtYWxlc19iYWNrJHllYXIpCm1hbGVzX25vX3Bpdm90IDwtIG1hbGVzXzA0Cm1hbGVzX3Bpdm90IDwtIHBpdm90X3dpZGVyKG1hbGVzXzA0LCBuYW1lc19mcm9tID0gImdfd2hvcmVnaW9uIiwgdmFsdWVzX2Zyb20gPSAibmV3cmVsX20wNCIpCgpzZWxlY3QoYWZyX20wNCwgIlBvaW50IEZvcmVjYXN0IikKCmZvcmUyMDIwIDwtIGZ1bmN0aW9uKGRmKXsKICBhIDwtIHNlbGVjdChkZiwgIlBvaW50IEZvcmVjYXN0IikKICBiIDwtICIyMDIwIgogIGNvbG5hbWVzKGEpIDwtICJOdW1iZXIiCiAgcm93bmFtZXMoYSkgPC0gTlVMTAogIGEkWWVhciA8LSBiCiAgcmV0dXJuKGEpCn0KCiNtYWxlcyAwNCAKZm9yZV9hZnJtMDQgPC0gZm9yZTIwMjAoYWZyX20wNCkKZm9yZV9hbXJtMDQgPC0gZm9yZTIwMjAoYW1yX20wNCkKZm9yZV9lbXJtMDQgPC0gZm9yZTIwMjAoZW1yX20wNCkKZm9yZV9ldXJtMDQgPC0gZm9yZTIwMjAoZXVyX20wNCkKZm9yZV9zZWFtMDQgPC0gZm9yZTIwMjAoc2VhX20wNCkKZm9yZV93cHJtMDQgPC0gZm9yZTIwMjAod3ByX20wNCkKCmJvdW5kX2ZvcmUgPC0gY2JpbmQoZm9yZV9hZnJtMDQsIGZvcmVfYW1ybTA0JE51bWJlciwgZm9yZV9lbXJtMDQkTnVtYmVyLCBmb3JlX2V1cm0wNCROdW1iZXIsIGZvcmVfc2VhbTA0JE51bWJlciwgZm9yZV93cHJtMDQkTnVtYmVyKQoKY29sbmFtZXMoYm91bmRfZm9yZSkgPC0gYygiQUZSIiwgIlllYXIiLCAiQU1SIiwgIkVNUiIsICJFVVIiLCAiU0VBIiwgIldQUiIpCmJvdW5kX2ZvcmUgPC0gYm91bmRfZm9yZVssIGMoMiwgMSwgMzo3KV0KCiNmZW1hbGVzMDQKZm9yZV9hZnJmMDQgPC0gZm9yZTIwMjAoYWZyX2YwNCkKZm9yZV9hbXJmMDQgPC0gZm9yZTIwMjAoYW1yX2YwNCkKZm9yZV9lbXJmMDQgPC0gZm9yZTIwMjAoZW1yX2YwNCkKZm9yZV9ldXJmMDQgPC0gZm9yZTIwMjAoZXVyX2YwNCkKZm9yZV9zZWFmMDQgPC0gZm9yZTIwMjAoc2VhX2YwNCkKZm9yZV93cHJmMDQgPC0gZm9yZTIwMjAod3ByX2YwNCkKCmJvdW5kX2YwNCA8LSBjYmluZChmb3JlX2FmcmYwNCwgZm9yZV9hbXJmMDQkTnVtYmVyLCBmb3JlX2VtcmYwNCROdW1iZXIsIGZvcmVfZXVyZjA0JE51bWJlciwgZm9yZV9zZWFmMDQkTnVtYmVyLCBmb3JlX3dwcmYwNCROdW1iZXIpCgpjb2xuYW1lcyhib3VuZF9mMDQpIDwtIGMoIkFGUiIsICJZZWFyIiwgIkFNUiIsICJFTVIiLCAiRVVSIiwgIlNFQSIsICJXUFIiKQpib3VuZF9mMDQgPC0gYm91bmRfZjA0WywgYygyLCAxLCAzOjcpXQoKI21hbGVzIDUxNCAKZm9yZV9hZnJtNTE0IDwtIGZvcmUyMDIwKGFmcl9tNTE0KQpmb3JlX2Ftcm01MTQgPC0gZm9yZTIwMjAoYW1yX201MTQpCmZvcmVfZW1ybTUxNCA8LSBmb3JlMjAyMChlbXJfbTUxNCkKZm9yZV9ldXJtNTE0IDwtIGZvcmUyMDIwKGV1cl9tNTE0KQpmb3JlX3NlYW01MTQgPC0gZm9yZTIwMjAoc2VhX201MTQpCmZvcmVfd3BybTUxNCA8LSBmb3JlMjAyMCh3cHJfbTUxNCkKCmJvdW5kX201MTQgPC0gY2JpbmQoZm9yZV9hZnJtNTE0LCBmb3JlX2Ftcm01MTQkTnVtYmVyLCBmb3JlX2Vtcm01MTQkTnVtYmVyLCBmb3JlX2V1cm01MTQkTnVtYmVyLCBmb3JlX3NlYW01MTQkTnVtYmVyLCBmb3JlX3dwcm01MTQkTnVtYmVyKQoKY29sbmFtZXMoYm91bmRfbTUxNCkgPC0gYygiQUZSIiwgIlllYXIiLCAiQU1SIiwgIkVNUiIsICJFVVIiLCAiU0VBIiwgIldQUiIpCmJvdW5kX201MTQgPC0gYm91bmRfbTUxNFssIGMoMiwgMSwgMzo3KV0KCiNmZW1hbGVzIDUxNCAKZm9yZV9hZnJmNTE0IDwtIGZvcmUyMDIwKGFmcl9mNTE0KQpmb3JlX2FtcmY1MTQgPC0gZm9yZTIwMjAoYW1yX2Y1MTQpCmZvcmVfZW1yZjUxNCA8LSBmb3JlMjAyMChlbXJfZjUxNCkKZm9yZV9ldXJmNTE0IDwtIGZvcmUyMDIwKGV1cl9mNTE0KQpmb3JlX3NlYWY1MTQgPC0gZm9yZTIwMjAoc2VhX2Y1MTQpCmZvcmVfd3ByZjUxNCA8LSBmb3JlMjAyMCh3cHJfZjUxNCkKCmJvdW5kX2Y1MTQgPC0gY2JpbmQoZm9yZV9hZnJmNTE0LCBmb3JlX2FtcmY1MTQkTnVtYmVyLCBmb3JlX2VtcmY1MTQkTnVtYmVyLCBmb3JlX2V1cmY1MTQkTnVtYmVyLCBmb3JlX3NlYWY1MTQkTnVtYmVyLCBmb3JlX3dwcmY1MTQkTnVtYmVyKQoKY29sbmFtZXMoYm91bmRfZjUxNCkgPC0gYygiQUZSIiwgIlllYXIiLCAiQU1SIiwgIkVNUiIsICJFVVIiLCAiU0VBIiwgIldQUiIpCmJvdW5kX2Y1MTQgPC0gYm91bmRfZjUxNFssIGMoMiwgMSwgMzo3KV0KCiNtYWxlcyAxNXBsdXMgCmZvcmVfYWZybTE1cGx1cyA8LSBmb3JlMjAyMChhZnJfbTE1cGx1cykKZm9yZV9hbXJtMTVwbHVzIDwtIGZvcmUyMDIwKGFtcl9tMTVwbHVzKQpmb3JlX2Vtcm0xNXBsdXMgPC0gZm9yZTIwMjAoZW1yX20xNXBsdXMpCmZvcmVfZXVybTE1cGx1cyA8LSBmb3JlMjAyMChldXJfbTE1cGx1cykKZm9yZV9zZWFtMTVwbHVzIDwtIGZvcmUyMDIwKHNlYV9tMTVwbHVzKQpmb3JlX3dwcm0xNXBsdXMgPC0gZm9yZTIwMjAod3ByX20xNXBsdXMpCgpib3VuZF9tMTVwbHVzIDwtIGNiaW5kKGZvcmVfYWZybTE1cGx1cywgZm9yZV9hbXJtMTVwbHVzJE51bWJlciwgZm9yZV9lbXJtMTVwbHVzJE51bWJlciwgZm9yZV9ldXJtMTVwbHVzJE51bWJlciwgZm9yZV9zZWFtMTVwbHVzJE51bWJlciwgZm9yZV93cHJtMTVwbHVzJE51bWJlcikKCmNvbG5hbWVzKGJvdW5kX20xNXBsdXMpIDwtIGMoIkFGUiIsICJZZWFyIiwgIkFNUiIsICJFTVIiLCAiRVVSIiwgIlNFQSIsICJXUFIiKQpib3VuZF9tMTVwbHVzIDwtIGJvdW5kX20xNXBsdXNbLCBjKDIsIDEsIDM6NyldCgojZmVtYWxlcyAxNXBsdXMgCmZvcmVfYWZyZjE1cGx1cyA8LSBmb3JlMjAyMChhZnJfZjE1cGx1cykKZm9yZV9hbXJmMTVwbHVzIDwtIGZvcmUyMDIwKGFtcl9mMTVwbHVzKQpmb3JlX2VtcmYxNXBsdXMgPC0gZm9yZTIwMjAoZW1yX2YxNXBsdXMpCmZvcmVfZXVyZjE1cGx1cyA8LSBmb3JlMjAyMChldXJfZjE1cGx1cykKZm9yZV9zZWFmMTVwbHVzIDwtIGZvcmUyMDIwKHNlYV9mMTVwbHVzKQpmb3JlX3dwcmYxNXBsdXMgPC0gZm9yZTIwMjAod3ByX2YxNXBsdXMpCgpib3VuZF9mMTVwbHVzIDwtIGNiaW5kKGZvcmVfYWZyZjE1cGx1cywgZm9yZV9hbXJmMTVwbHVzJE51bWJlciwgZm9yZV9lbXJmMTVwbHVzJE51bWJlciwgZm9yZV9ldXJmMTVwbHVzJE51bWJlciwgZm9yZV9zZWFmMTVwbHVzJE51bWJlciwgZm9yZV93cHJmMTVwbHVzJE51bWJlcikKCmNvbG5hbWVzKGJvdW5kX2YxNXBsdXMpIDwtIGMoIkFGUiIsICJZZWFyIiwgIkFNUiIsICJFTVIiLCAiRVVSIiwgIlNFQSIsICJXUFIiKQpib3VuZF9mMTVwbHVzIDwtIGJvdW5kX2YxNXBsdXNbLCBjKDIsIDEsIDM6NyldCgoKYGBgCgpBdHRlbXB0IDIgYXQgY3JlYXRpbmcgdGhlIHRpbWUgc2VyaWVzIGFuYWx5c2VzIAoKYGBge3J9CiNtYWxlczA0IHBsb3QKbWFsZXNfMDQgPC0gc2VsZWN0KHBlcmNfd29ybGQsIGMoZ193aG9yZWdpb24sIHllYXIsIG5ld3JlbF9tMDQpKSAKZ2dfbWFsZXMwNCA8LSBnZ3Bsb3QobWFsZXNfMDQsIGFlcyh4ID0geWVhciwgeSA9IG5ld3JlbF9tMDQsIGNvbCA9IGdfd2hvcmVnaW9uKSkgKyBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAyNzA0MywgY29sID0gInJlZCIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDIwNjIsIGNvbCA9ICJicm93biIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDE3MjQzLjE3LCBjb2wgPSAiZ3JlZW4iKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAxNDY1LCBjb2wgPSAidHVycXVvaXNlMiIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDU4OTUxLjgzLCBjb2wgPSAiYmx1ZSIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDEyNTU4LCBjb2wgPSAicGluayIpICsgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgNjAwMDApKSArIGxhYnModGl0bGUgPSAiTm90aWZpY2F0aW9ucyBUaW1lIFNlcmllcyBmb3IgTWFsZXMgMC00IHlycyIpCgojZmVtYWxlcyAwNCBwbG90CmZlbWFsZXNfMDQgPC0gc2VsZWN0KHBlcmNfd29ybGQsIGMoZ193aG9yZWdpb24sIHllYXIsIG5ld3JlbF9mMDQpKSAKZ2dfZmVtYWxlczA0IDwtIGdncGxvdChmZW1hbGVzXzA0LCBhZXMoeCA9IHllYXIsIHkgPSBuZXdyZWxfZjA0LCBjb2wgPSBnX3dob3JlZ2lvbikpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMjM3OTAsIGNvbCA9ICJyZWQiKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAxNzc2LCBjb2wgPSAiYnJvd24iKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAxMzI4Ni4xNywgY29sID0gImdyZWVuIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMTI2OSwgY29sID0gInR1cnF1b2lzZTIiKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSA0MzY5NCwgY29sID0gImJsdWUiKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAxMDE0MCwgY29sID0gInBpbmsiKSArIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDUwMDAwKSkgKyBsYWJzKHRpdGxlID0gIk5vdGlmaWNhdGlvbnMgVGltZSBTZXJpZXMgZm9yIEZlbWFsZXMgMC00IHlycyIpCgojbWFsZXMgNTE0IHBsb3QgCm1hbGVzXzUxNCA8LSBzZWxlY3QocGVyY193b3JsZCwgYyhnX3dob3JlZ2lvbiwgeWVhciwgbmV3cmVsX201MTQpKSAKZ2dfbWFsZXM1MTQgPC0gZ2dwbG90KG1hbGVzXzUxNCwgYWVzKHggPSB5ZWFyLCB5ID0gbmV3cmVsX201MTQsIGNvbCA9IGdfd2hvcmVnaW9uKSkgKyBnZW9tX2xpbmUoKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAzMjM1MiwgY29sID0gInJlZCIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDI4MjYsIGNvbCA9ICJicm93biIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDE4NjIwLCBjb2wgPSAiZ3JlZW4iKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAzMDU3LCBjb2wgPSAidHVycXVvaXNlMiIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDgyNTM1LCBjb2wgPSAiYmx1ZSIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDE5NjA2LCBjb2wgPSAicGluayIpICsgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgOTAwMDApKSArIGxhYnModGl0bGUgPSAiTm90aWZpY2F0aW9ucyBUaW1lIFNlcmllcyBmb3IgTWFsZXMgNS0xNCB5cnMiKQoKI2ZlbWFsZXM1MTQKZmVtYWxlc181MTQgPC0gc2VsZWN0KHBlcmNfd29ybGQsIGMoZ193aG9yZWdpb24sIHllYXIsIG5ld3JlbF9mNTE0KSkgCmdnX2ZlbWFsZXM1MTQgPC0gZ2dwbG90KGZlbWFsZXNfNTE0LCBhZXMoeCA9IHllYXIsIHkgPSBuZXdyZWxfZjUxNCwgY29sID0gZ193aG9yZWdpb24pKSArIGdlb21fbGluZSgpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDMyNDExLCBjb2wgPSAicmVkIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMjg5NywgY29sID0gImJyb3duIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMjE2MzIsIGNvbCA9ICJncmVlbiIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDI5NTMsIGNvbCA9ICJ0dXJxdW9pc2UyIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gODcwODYsIGNvbCA9ICJibHVlIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMTc1MDAsIGNvbCA9ICJwaW5rIikgKyBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDAwMDApKSArIGxhYnModGl0bGUgPSAiTm90aWZpY2F0aW9ucyBUaW1lIFNlcmllcyBmb3IgRmVtYWxlcyA1LTE0IHlycyIpCgojbWFsZXMgMTUgcGx1cyBwbG90IAptYWxlc18xNXBsdXMgPC0gc2VsZWN0KHBlcmNfd29ybGQsIGMoZ193aG9yZWdpb24sIHllYXIsIG5ld3JlbF9tMTVwbHVzKSkgCmdnX21hbGVzMTVwbHVzIDwtIGdncGxvdChtYWxlc18xNXBsdXMsIGFlcyh4ID0geWVhciwgeSA9IG5ld3JlbF9tMTVwbHVzLCBjb2wgPSBnX3dob3JlZ2lvbikpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gNjYxOTUzLCBjb2wgPSAicmVkIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMTU0MzA1LjMsIGNvbCA9ICJicm93biIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDIyNjI5NCwgY29sID0gImdyZWVuIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMTI5ODE5LjcsIGNvbCA9ICJ0dXJxdW9pc2UyIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gMTkzMTM0MSwgY29sID0gImJsdWUiKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSA4OTE4NDksIGNvbCA9ICJwaW5rIikgKyBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAyMDAwMDAwKSkgKyBsYWJzKHRpdGxlID0gIk5vdGlmaWNhdGlvbnMgVGltZSBTZXJpZXMgZm9yIE1hbGVzIDE1cGx1cyB5cnMiKQoKI2ZlbWFsZXMgMTUgcGx1cyBwbG90IApmZW1hbGVzXzE1cGx1cyA8LSBzZWxlY3QocGVyY193b3JsZCwgYyhnX3dob3JlZ2lvbiwgeWVhciwgbmV3cmVsX2YxNXBsdXMpKSAKZ2dfZmVtYWxlczE1cGx1cyA8LSBnZ3Bsb3QoZmVtYWxlc18xNXBsdXMsIGFlcyh4ID0geWVhciwgeSA9IG5ld3JlbF9mMTVwbHVzLCBjb2wgPSBnX3dob3JlZ2lvbikpICsgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gNDI2NzkwLCBjb2wgPSAicmVkIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gNzc0MTcsIGNvbCA9ICJicm93biIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDIwMTM4NiwgY29sID0gImdyZWVuIikgKyBnZW9tX3BvaW50KHggPSAyMDIwLCB5ID0gNjYyMjIuNSwgY29sID0gInR1cnF1b2lzZTIiKSArIGdlb21fcG9pbnQoeCA9IDIwMjAsIHkgPSAxMTgyNjQ1LCBjb2wgPSAiYmx1ZSIpICsgZ2VvbV9wb2ludCh4ID0gMjAyMCwgeSA9IDQzNTY1MSwgY29sID0gInBpbmsiKSArIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEyMDAwMDApKSArIGxhYnModGl0bGUgPSAiTm90aWZpY2F0aW9ucyBUaW1lIFNlcmllcyBmb3IgRmVtYWxlcyAxNXBsdXMgeXJzIikKCmBgYApDcmVhdGluZyBub3RpZmljYXRpb24gZ3JhcGhzIGZvciBlbnRpcmUgd29ybGQgCgpgYGB7cn0KI1B1dHRpbmcgdG9nZXRoZXIgbm90aWZpY2F0aW9uIGRhdGEgZm9yIHllYXJzIDIwMTMgdG8gMjAyMAp3b3JsZF9kYXRhIDwtIHdvcmxkXzIwMTNbLC1jKDE6MyldICU+JSBncm91cF9ieSh5ZWFyKSAlPiUgbmEub21pdCgpCnRvdF9tMDQgPC0gc3VtbWFyaXNlKHdvcmxkX2RhdGEsIHRvdGFsID0gc3VtKG5ld3JlbF9tMDQpKQp0b3RfbTA0ICU8PiUgYXMuZGF0YS5mcmFtZSgpCmNvbG5hbWVzKHRvdF9tMDQpIDwtIGMoInllYXIiLCAibTA0IikKCnRvdF9mMDQgPC0gc3VtbWFyaXNlKHdvcmxkX2RhdGEsIHRvdGFsID0gc3VtKG5ld3JlbF9mMDQpKQp0b3RfZjA0ICU8PiUgYXMuZGF0YS5mcmFtZSgpCmNvbG5hbWVzKHRvdF9mMDQpIDwtIGMoInllYXIiLCAiZjA0IikKCnRvdF9tNTE0IDwtIHN1bW1hcmlzZSh3b3JsZF9kYXRhLCB0b3RhbCA9IHN1bShuZXdyZWxfbTUxNCkpCnRvdF9tNTE0ICU8PiUgYXMuZGF0YS5mcmFtZSgpCmNvbG5hbWVzKHRvdF9tNTE0KSA8LSBjKCJ5ZWFyIiwgIm01MTQiKQoKdG90X2Y1MTQgPC0gc3VtbWFyaXNlKHdvcmxkX2RhdGEsIHRvdGFsID0gc3VtKG5ld3JlbF9mNTE0KSkKdG90X2Y1MTQgJTw+JSBhcy5kYXRhLmZyYW1lKCkKY29sbmFtZXModG90X2Y1MTQpIDwtIGMoInllYXIiLCAiZjUxNCIpCgp0b3RfbTE1cGx1cyA8LSBzdW1tYXJpc2Uod29ybGRfZGF0YSwgdG90YWwgPSBzdW0obmV3cmVsX20xNXBsdXMpKQp0b3RfbTE1cGx1cyAlPD4lIGFzLmRhdGEuZnJhbWUoKQpjb2xuYW1lcyh0b3RfbTE1cGx1cykgPC0gYygieWVhciIsICJtMTVwbHVzIikKCnRvdF9mMTVwbHVzIDwtIHN1bW1hcmlzZSh3b3JsZF9kYXRhLCB0b3RhbCA9IHN1bShuZXdyZWxfZjE1cGx1cykpCnRvdF9mMTVwbHVzICU8PiUgYXMuZGF0YS5mcmFtZSgpCmNvbG5hbWVzKHRvdF9mMTVwbHVzKSA8LSBjKCJ5ZWFyIiwgImYxNXBsdXMiKQoKYWxsX3RvdHMgPC0gY2JpbmQodG90X20wNCwgdG90X2YwNCRmMDQsIHRvdF9tNTE0JG01MTQsIHRvdF9mNTE0JGY1MTQsIHRvdF9tMTVwbHVzJG0xNXBsdXMsIHRvdF9mMTVwbHVzJGYxNXBsdXMpCmNvbG5hbWVzKGFsbF90b3RzKSA8LSBjKCJ5ZWFyIiwgImNhc2VfbTA0IiwgImNhc2VfZjA0IiwgImNhc2VfbTUxNCIsICJjYXNlX2Y1MTQiLCAiY2FzZV9tMTVwbHVzIiwgImNhc2VfZjE1cGx1cyIpCgphbGxfdG90cyA8LSBtdXRhdGUoYWxsX3RvdHMsICJhbGwwNCIgPSBjYXNlX20wNCArIGNhc2VfZjA0LCAiYWxsNTE0IiA9IGNhc2VfbTUxNCArIGNhc2VfZjUxNCwgImFsbDE1cGx1cyIgPSBjYXNlX20xNXBsdXMgKyBjYXNlX2YxNXBsdXMsICJhbGxfbWFsZSIgPSBjYXNlX20wNCArIGNhc2VfbTUxNCArIGNhc2VfbTE1cGx1cywgImFsbF9mZW1hbGUiID0gY2FzZV9mMDQgKyBjYXNlX2Y1MTQgKyBjYXNlX2YxNXBsdXMsICJhbGxfY2FzZXMiID0gYWxsX21hbGUgKyBhbGxfZmVtYWxlKQoKYWxsX2NvcHkgPC0gYWxsX3RvdHMKYWxsX2NvcHkwNCA8LSBhbGxfY29weVssIGMoMTozKV0gCmNvbG5hbWVzKGFsbF9jb3B5MDQpIDwtIGMoInllYXIiLCAibWFsZSIsICJmZW1hbGUiKQphbGxfY29weTA0IDwtIHBpdm90X2xvbmdlcihhbGxfY29weTA0LCBjb2xzID0gYyhtYWxlLCBmZW1hbGUpLCBuYW1lc190byA9ICJzZXgiLCB2YWx1ZXNfdG8gPSAiY2FzZXMiKQoKYWxsX2NvcHk1MTQgPC0gYWxsX2NvcHlbLCBjKDEsNCw1KV0gCmNvbG5hbWVzKGFsbF9jb3B5NTE0KSA8LSBjKCJ5ZWFyIiwgIm1hbGUiLCAiZmVtYWxlIikKYWxsX2NvcHk1MTQgPC0gcGl2b3RfbG9uZ2VyKGFsbF9jb3B5NTE0LCBjb2xzID0gYyhtYWxlLCBmZW1hbGUpLCBuYW1lc190byA9ICJzZXgiLCB2YWx1ZXNfdG8gPSAiY2FzZXMiKQoKYWxsX2NvcHkxNXBsdXMgPC0gYWxsX2NvcHlbLCBjKDEsNiw3KV0gCmNvbG5hbWVzKGFsbF9jb3B5MTVwbHVzKSA8LSBjKCJ5ZWFyIiwgIm1hbGUiLCAiZmVtYWxlIikKYWxsX2NvcHkxNXBsdXMgPC0gcGl2b3RfbG9uZ2VyKGFsbF9jb3B5MTVwbHVzLCBjb2xzID0gYyhtYWxlLCBmZW1hbGUpLCBuYW1lc190byA9ICJzZXgiLCB2YWx1ZXNfdG8gPSAiY2FzZXMiKQoKYWxsX2NvcHkxNXBsdXMgPC0gYWxsX2NvcHlbLCBjKDEsNiw3KV0gCmNvbG5hbWVzKGFsbF9jb3B5MTVwbHVzKSA8LSBjKCJ5ZWFyIiwgIm1hbGUiLCAiZmVtYWxlIikKYWxsX2NvcHkxNXBsdXMgPC0gcGl2b3RfbG9uZ2VyKGFsbF9jb3B5MTVwbHVzLCBjb2xzID0gYyhtYWxlLCBmZW1hbGUpLCBuYW1lc190byA9ICJzZXgiLCB2YWx1ZXNfdG8gPSAiY2FzZXMiKQoKYWxsX2NvcHlhbGwgPC0gYWxsX2NvcHlbLCBjKDEsMTEsMTIpXSAKY29sbmFtZXMoYWxsX2NvcHlhbGwpIDwtIGMoInllYXIiLCAibWFsZSIsICJmZW1hbGUiKQphbGxfY29weWFsbCA8LSBwaXZvdF9sb25nZXIoYWxsX2NvcHlhbGwsIGNvbHMgPSBjKG1hbGUsIGZlbWFsZSksIG5hbWVzX3RvID0gInNleCIsIHZhbHVlc190byA9ICJjYXNlcyIpCgojIyNEcmF3aW5nIHRoZSBwbG90cyAKd29ybGRfMDQgPC0gZ2dwbG90KGFsbF9jb3B5MDQsIGFlcyh4ID0geWVhciwgeSA9IGNhc2VzLCBmaWxsID0gc2V4KSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArIGxhYnModGl0bGUgPSAiTnVtYmVyIG9mIFJlcG9ydGVkIENhc2VzIEFtb25nc3QgMC00IHlycyBmcm9tIDIwMTMgdG8gMjAyMCIpCgp3b3JsZF81MTQgPC0gZ2dwbG90KGFsbF9jb3B5NTE0LCBhZXMoeCA9IHllYXIsIHkgPSBjYXNlcywgZmlsbCA9IHNleCkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKyBsYWJzKHRpdGxlID0gIk51bWJlciBvZiBSZXBvcnRlZCBDYXNlcyBBbW9uZ3N0IDUtMTQgeXJzIGZyb20gMjAxMyB0byAyMDIwIikKCndvcmxkXzE1cGx1cyA8LSBnZ3Bsb3QoYWxsX2NvcHkxNXBsdXMsIGFlcyh4ID0geWVhciwgeSA9IGNhc2VzLCBmaWxsID0gc2V4KSkgKyBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAiZG9kZ2UiKSArIGxhYnModGl0bGUgPSAiTnVtYmVyIG9mIFJlcG9ydGVkIENhc2VzIEFtb25nc3QgMTVwbHVzIHlycyBmcm9tIDIwMTMgdG8gMjAyMCIpCgp3b3JsZF9hbGwgPC0gZ2dwbG90KGFsbF9jb3B5YWxsLCBhZXMoeCA9IHllYXIsIHkgPSBjYXNlcywgZmlsbCA9IHNleCkpICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKyBsYWJzKHRpdGxlID0gIk51bWJlciBvZiBSZXBvcnRlZCBDYXNlcyBBbW9uZ3N0IEFsbCBBZ2VzIGZyb20gMjAxMyB0byAyMDIwIikKCmBgYAoKUmVwZWF0aW5nIHRoZSBjb250aW5lbnRhbCBkaWZmZXJlbmNlIGJldHdlZW4gYWN0dWFsIGFuZCBwcmVkaWN0ZWQgYW5kIGluY2x1ZGluZyBjb2x1bW4gZm9yIG92ZXJhbGwgCgpgYGB7cn0KI2V4dHJhY3RpbmcgZGF0YSBmb3Igd2hvbGUgd29ybGQgCnN1bW1lZF9tMDQgPC0gdG90X3dvcmxkICU+JSBncm91cF9ieSh5ZWFyKSAlPiUgbmEub21pdCgpCnN1bW1lZF9tMDQgPC0gc3VtbWFyaXNlKHN1bW1lZF9tMDQsIHRvdGFsID0gc3VtKG5ld3JlbF9tMDQpKQpjb2xuYW1lcyhzdW1tZWRfbTA0KSA8LSBjKCJ5ZWFyIiwgIm0wNCIpCgpzdW1tZWRfZjA0IDwtIHRvdF93b3JsZCAlPiUgZ3JvdXBfYnkoeWVhcikgJT4lIG5hLm9taXQoKQpzdW1tZWRfZjA0IDwtIHN1bW1hcmlzZShzdW1tZWRfZjA0LCB0b3RhbCA9IHN1bShuZXdyZWxfZjA0KSkKY29sbmFtZXMoc3VtbWVkX2YwNCkgPC0gYygieWVhciIsICJmMDQiKQoKc3VtbWVkX201MTQgPC0gdG90X3dvcmxkICU+JSBncm91cF9ieSh5ZWFyKSAlPiUgbmEub21pdCgpCnN1bW1lZF9tNTE0IDwtIHN1bW1hcmlzZShzdW1tZWRfbTUxNCwgdG90YWwgPSBzdW0obmV3cmVsX201MTQpKQpjb2xuYW1lcyhzdW1tZWRfbTUxNCkgPC0gYygieWVhciIsICJtNTE0IikKCnN1bW1lZF9mNTE0IDwtIHRvdF93b3JsZCAlPiUgZ3JvdXBfYnkoeWVhcikgJT4lIG5hLm9taXQoKQpzdW1tZWRfZjUxNCA8LSBzdW1tYXJpc2Uoc3VtbWVkX2Y1MTQsIHRvdGFsID0gc3VtKG5ld3JlbF9mNTE0KSkKY29sbmFtZXMoc3VtbWVkX2Y1MTQpIDwtIGMoInllYXIiLCAiZjUxNCIpCgpzdW1tZWRfbTE1cGx1cyA8LSB0b3Rfd29ybGQgJT4lIGdyb3VwX2J5KHllYXIpICU+JSBuYS5vbWl0KCkKc3VtbWVkX20xNXBsdXMgPC0gc3VtbWFyaXNlKHN1bW1lZF9tMTVwbHVzLCB0b3RhbCA9IHN1bShuZXdyZWxfbTE1cGx1cykpCmNvbG5hbWVzKHN1bW1lZF9tMTVwbHVzKSA8LSBjKCJ5ZWFyIiwgIm0xNXBsdXMiKQoKc3VtbWVkX2YxNXBsdXMgPC0gdG90X3dvcmxkICU+JSBncm91cF9ieSh5ZWFyKSAlPiUgbmEub21pdCgpCnN1bW1lZF9mMTVwbHVzIDwtIHN1bW1hcmlzZShzdW1tZWRfZjE1cGx1cywgdG90YWwgPSBzdW0obmV3cmVsX2YxNXBsdXMpKQpjb2xuYW1lcyhzdW1tZWRfZjE1cGx1cykgPC0gYygieWVhciIsICJmMTVwbHVzIikKCmFsbF9zdW1tZWQgPC0gY2JpbmQoc3VtbWVkX20wNCwgc3VtbWVkX2YwNCRmMDQsIHN1bW1lZF9tNTE0JG01MTQsIHN1bW1lZF9mNTE0JGY1MTQsIHN1bW1lZF9tMTVwbHVzJG0xNXBsdXMsIHN1bW1lZF9mMTVwbHVzJGYxNXBsdXMpCmNvbG5hbWVzKGFsbF9zdW1tZWQpIDwtIGMoInllYXIiLCAibTA0IiwgImYwNCIsICJtNTE0IiwgImY1MTQiLCAibTE1cGx1cyIsICJmMTVwbHVzIikKCiMjQXR0ZW1wdCBhdCBjcmVhdGluZyBmb3JlY2FzdCAKYXJpbWFfYWxsbTA0IDwtIGFsbF9zdW1tZWRbLTgsIDJdCnRzX2FyaW1hbTA0IDwtIHRzKGFyaW1hX2FsbG0wNCwgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYW0wNCAlPD4lIGF1dG8uYXJpbWEoZD0xLCBEPTEsIHN0ZXB3aXNlID0gRkFMU0UsIGFwcHJveGltYXRpb24gPSBGQUxTRSwgdHJhY2UgPSBUUlVFKQpmb3JlY2FzdF9tMDQgPC0gZm9yZWNhc3QodHNfYXJpbWFtMDQsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9tMDQpCnN1bV9tMDQgPC0gcHJpbnQoc3VtbWFyeShmb3JlY2FzdF9tMDQpKQoKYXJpbWFfYWxsZjA0IDwtIGFsbF9zdW1tZWRbLTgsIDNdCnRzX2FyaW1hZjA0IDwtIHRzKGFyaW1hX2FsbGYwNCwgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYWYwNCAlPD4lIGF1dG8uYXJpbWEoZD0xLCBEPTEsIHN0ZXB3aXNlID0gRkFMU0UsIGFwcHJveGltYXRpb24gPSBGQUxTRSwgdHJhY2UgPSBUUlVFKQpmb3JlY2FzdF9mMDQgPC0gZm9yZWNhc3QodHNfYXJpbWFmMDQsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9mMDQpCnN1bV9mMDQgPC0gcHJpbnQoc3VtbWFyeShmb3JlY2FzdF9mMDQpKQoKYXJpbWFfYWxsbTUxNCA8LSBhbGxfc3VtbWVkWy04LCA0XQp0c19hcmltYW01MTQgPC0gdHMoYXJpbWFfYWxsbTUxNCwgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYW01MTQgJTw+JSBhdXRvLmFyaW1hKGQ9MSwgRD0xLCBzdGVwd2lzZSA9IEZBTFNFLCBhcHByb3hpbWF0aW9uID0gRkFMU0UsIHRyYWNlID0gVFJVRSkKZm9yZWNhc3RfbTUxNCA8LSBmb3JlY2FzdCh0c19hcmltYW01MTQsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9tNTE0KQpzdW1fbTUxNCA8LSBwcmludChzdW1tYXJ5KGZvcmVjYXN0X201MTQpKQoKYXJpbWFfYWxsZjUxNCA8LSBhbGxfc3VtbWVkWy04LCA1XQp0c19hcmltYWY1MTQgPC0gdHMoYXJpbWFfYWxsZjUxNCwgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYWY1MTQgJTw+JSBhdXRvLmFyaW1hKGQ9MSwgRD0xLCBzdGVwd2lzZSA9IEZBTFNFLCBhcHByb3hpbWF0aW9uID0gRkFMU0UsIHRyYWNlID0gVFJVRSkKZm9yZWNhc3RfZjUxNCA8LSBmb3JlY2FzdCh0c19hcmltYWY1MTQsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9mNTE0KQpzdW1fZjUxNCA8LSBwcmludChzdW1tYXJ5KGZvcmVjYXN0X2Y1MTQpKQoKYXJpbWFfYWxsbTE1cGx1cyA8LSBhbGxfc3VtbWVkWy04LCA2XQp0c19hcmltYW0xNXBsdXMgPC0gdHMoYXJpbWFfYWxsbTE1cGx1cywgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYW0xNXBsdXMgJTw+JSBhdXRvLmFyaW1hKGQ9MSwgRD0xLCBzdGVwd2lzZSA9IEZBTFNFLCBhcHByb3hpbWF0aW9uID0gRkFMU0UsIHRyYWNlID0gVFJVRSkKZm9yZWNhc3RfbTE1cGx1cyA8LSBmb3JlY2FzdCh0c19hcmltYW0xNXBsdXMsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9tMTVwbHVzKQpzdW1fbTE1cGx1cyA8LSBwcmludChzdW1tYXJ5KGZvcmVjYXN0X20xNXBsdXMpKQoKYXJpbWFfYWxsZjE1cGx1cyA8LSBhbGxfc3VtbWVkWy04LCA3XQp0c19hcmltYWYxNXBsdXMgPC0gdHMoYXJpbWFfYWxsZjE1cGx1cywgc3RhcnQgPSAyMDEzLCBmcmVxdWVuY3kgPSAxKQp0c19hcmltYWYxNXBsdXMgJTw+JSBhdXRvLmFyaW1hKGQ9MSwgRD0xLCBzdGVwd2lzZSA9IEZBTFNFLCBhcHByb3hpbWF0aW9uID0gRkFMU0UsIHRyYWNlID0gVFJVRSkKZm9yZWNhc3RfZjE1cGx1cyA8LSBmb3JlY2FzdCh0c19hcmltYWYxNXBsdXMsIGggPSAxKQphdXRvcGxvdChmb3JlY2FzdF9mMTVwbHVzKQpzdW1fZjE1cGx1cyA8LSBwcmludChzdW1tYXJ5KGZvcmVjYXN0X2YxNXBsdXMpKQoKIyNDcmVhdGluZyBzaW5nbGUgZGF0YSBmcmFtZSB3aXRoIGJlc3QgZXN0aW1hdGVzIGZvciBlYWNoIGdyb3VwIApiZXN0X2VzdGltYXRlcyA8LSBjYmluZChzdW1fbTA0JGBQb2ludCBGb3JlY2FzdGAsIHN1bV9mMDQkYFBvaW50IEZvcmVjYXN0YCwgc3VtX201MTQkYFBvaW50IEZvcmVjYXN0YCwgc3VtX2Y1MTQkYFBvaW50IEZvcmVjYXN0YCwgc3VtX20xNXBsdXMkYFBvaW50IEZvcmVjYXN0YCwgc3VtX2YxNXBsdXMkYFBvaW50IEZvcmVjYXN0YCkKY29sbmFtZXMoYmVzdF9lc3RpbWF0ZXMpIDwtIGMoIm0wNCIsICJmMDQiLCAibTUxNCIsICJmNTE0IiwgIm0xNXBsdXMiLCAiZjE1cGx1cyIpCgphbGxfY29tcGFyZWQgPC0gcmJpbmQoYWxsX3N1bW1lZFs4LC0xXSwgYmVzdF9lc3RpbWF0ZXMpCnJvd25hbWVzKGFsbF9jb21wYXJlZCkgPC0gYygiQWN0dWFsIiwgIlByZWRpY3RlZCIpCgphbGxfZGlmZmVyZW5jZXMgPC0gdChhbGxfY29tcGFyZWQpCmFsbF9kaWZmZXJlbmNlcyAlPD4lIGFzLmRhdGEuZnJhbWUoKQphbGxfZGlmZmVyZW5jZXMgPC0gbXV0YXRlKGFsbF9kaWZmZXJlbmNlcywgUGVyY2VudGFnZSA9IDEwMCooKEFjdHVhbC1QcmVkaWN0ZWQpL1ByZWRpY3RlZCkpCgoKc2V4IDwtIGMoIm0iLCAiZiIpCmFkZF9jb2wxIDwtIGNiaW5kKGFsbF9kaWZmZXJlbmNlcywgc2V4KQphZ2VfZ3JvdXAgPC0gYygiMDQiLCAiMDQiLCAiNTE0IiwgIjUxNCIsICIxNXBsdXMiLCAiMTVwbHVzIikKYWRkX2NvbDIgPC0gY2JpbmQoYWRkX2NvbDEsIGFnZV9ncm91cCkKZ193aG9yZWdpb24gPC0gIkFMTCIKYWRkX2NvbDMgPC0gY2JpbmQoYWRkX2NvbDIsIGdfd2hvcmVnaW9uKQoKI1JlYWR5IHRvIG1lcmdlIApyZWFkeV9hbGwgPC0gYWRkX2NvbDNbLCBjKDUsNCw2LDMpXQpjb2xuYW1lcyhyZWFkeV9hbGwpW2NvbG5hbWVzKHJlYWR5X2FsbCkgPT0gIlBlcmNlbnRhZ2UiXSA8LSAidmFsdWUiCgpwaXZfZm91ciA8LSByYmluZChwaXZfdGhyZWUsIHJlYWR5X2FsbCkKcGl2X2ZvdXIgPC0gcGl2X2ZvdXIgJT4lIGFycmFuZ2UoYWdlX2dyb3VwKSAlPiUgZ3JvdXBfYnkoYWdlX2dyb3VwKSAlPiUgYXJyYW5nZShzZXgpCnBpdl9mb3VyJGdfd2hvcmVnaW9uIDwtIGZhY3RvcihwaXZfZm91ciRnX3dob3JlZ2lvbiwgbGV2ZWxzID0gYygiQUZSIiwgIkFNUiIsICJFTVIiLCAiRVVSIiwgIlNFQSIsICJXUFIiLCAiQUxMIikpCgphcmltYV9mb3VyIDwtIGdncGxvdChwaXZfZm91ciwgYWVzKHggPSBnX3dob3JlZ2lvbiwgeSA9IHZhbHVlLCBmaWxsID0gc2V4KSkgKyBmYWNldF93cmFwKH5waXZfZm91ciRhZ2VfZ3JvdXApICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImRvZGdlIikgKyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkgKyB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpICsgeGxhYigiUmVnaW9uIikgKyB5bGFiKCJQZXJjZW50YWdlIERpZmZlcmVuY2UgQmV0d2VlbiBBY3R1YWwgYW5kIFByZWRpY3RlZCBDYXNlcyBpbiAyMDIwIikgKyBsYWJzKHRpdGxlID0gIkRpZmZlcmVuY2UgQmV0d2VlbiBBY3R1YWwgYW5kIFByZWRpY3RlZCBOb3RpZmljYXRpb25zIGluIDIwMjAiKQoKYXJpbWFfZm91ciAKYGBgCgoK